我正在开发一个Silverlight CustomControl,它定义了一个名为SpinnerSize
的依赖项属性。现在,我想使用Border
将默认模板内SpinnerSize
的宽度和高度设置为TemplateBinding
- 属性:
<Style TargetType="local:MyCustomControl">
<Setter Property="SpinnerSize" Value="12" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MyCustomControl">
<Border
Width="{TemplateBinding SpinnerSize}"
Height="{TemplateBinding SpinnerSize}"
Background="Red" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
上例中的SpinnerSize
引用定义如下:
public static readonly DependencyProperty SpinnerSizeProperty =
DependencyProperty.Register(
"SpinnerSize",
typeof(int),
typeof(MyCustomControl),
new PropertyMetadata(default(int)));
public int SpinnerSize
{
get { return (int)this.GetValue(SpinnerSizeProperty); }
set { this.SetValue(SpinnerSizeProperty, value); }
}
结果是我根本看不到边界。如果我手动将边框的宽度和高度设置为一个值,一切正常。
TemplateBinding
是实现这一目标的有效方法,还是必须在控件的OnApplyTemplate()
- 方法中手动设置宽度和高度?
答案 0 :(得分:1)
你的XAML看起来很好,使用这样的TemplateBinding是有效的,所以问题必须在你的DependencyProperty中。
高度和宽度是双打。绑定引擎不处理隐式转换。
将您的DP更改为该类型,它应该可以正常工作。