我正在尝试自定义Silverlight控件,但是我怎么也无法让TemplateBindings起作用。能否有人检查一下这个简化版本,看看我是否漏掉了什么。
所以我的ControlTemplate在generic.xaml中如下:
<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);
}
}
}
}
我期望当这个程序运行时,文本块将显示数字20。有什么想法为什么不起作用吗?
另外,我有一个单独的项目,其中包含对NumericStepperControl程序集的引用,当它运行时,控件似乎会正确构建。
编辑...经过更深入的调查后,我发现如果将Value属性的类型更改为字符串,则可以正常工作。为什么文本块不只是对传递给它的内容调用toString?有没有办法解决这个问题,因为我可以看到它经常发生?