Silverlight でカスタム コントロールをいじっているだけで、私の人生では TemplateBindings を機能させることができません。私が何か欠けているかどうかを確認するために、誰かがこの縮小版をもう一度提供できますか.
したがって、generic.xaml の ControlTemplate は次のようになります。
<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>
そして私のコントロールクラスは次のようになります:
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);
}
}
}
}
これが実行されると、TextBlock が 20 という数字を表示することを期待しています。
側面として、NumericStepperControl アセンブリへの参照を含む別のプロジェクトがあり、それを実行すると、コントロールが正しくビルドされているように見えます。
編集...もう少し調査した後、Valueプロパティのタイプを文字列に変更すると正常に機能することがわかりました。テキストブロックは、渡されたものに対して toString を呼び出さないのはなぜですか? 私はそれがたくさん起こっているのを見ることができるので、これを回避する方法はありますか?