Ich bin nur mit benutzerdefinierten Steuerelemente in Silverlight mucken und für das Leben von mir kann ich nicht die TemplateBindings funktionieren. Kann jemand diese reduzierte Version einmal geben, um zu sehen, ob ich etwas verpasse?TemplateBindings in benutzerdefinierten Steuerelementen
Also meine Control im generic.xaml sieht aus wie
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:NumericStepperControl;assembly=NumericStepperControl">
<Style TargetType="local:NumericStepper">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:NumericStepper">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border Grid.Column="0" BorderBrush="Black" BorderThickness="2" Width="50" Height="30">
<TextBlock Width="50" Height="30" Text="{TemplateBinding Value}" />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
und meine Steuerklasse wie folgt aussieht:
namespace NumericStepperControl
{
public class NumericStepper : Control
{
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(int), typeof(NumericStepper), new PropertyMetadata(20));
public NumericStepper()
: base()
{
DefaultStyleKey = typeof(NumericStepper);
}
public int Value
{
get
{
return (int)GetValue(ValueProperty);
}
set
{
SetValue(ValueProperty, value);
}
}
}
}
ich erwarte ich, wenn dies der TextBlock- läuft wird 20 die Nummer angezeigt werden soll. Irgendwelche Ideen, warum das nicht funktioniert?
Als eine Seite nicht ich habe ein separates Projekt, das eine Referenz auf die NumericStepperControl Assembly enthält und wenn es ausgeführt wird scheinen die Steuerelemente korrekt zu erstellen.
Edit ... nach ein bisschen mehr Untersuchung habe ich festgestellt, dass, wenn ich den Typ der Value-Eigenschaft in eine Zeichenfolge ändern, die gut funktioniert. Warum ruft ein Textblock nicht einfach einen toString auf, was auch immer an ihn übergeben wird? Gibt es einen Weg um dies zu tun, da ich sehe, dass es viel passiert?
Ich habe gerade fast einen Tag verbrannt, um das herauszufinden. Danke für deine eigene Antwort James - sehr fleißig !! –