如何使用TemplateBinding在Silverlight中设置CustomControl的大小?

时间:2013-02-19 09:00:10

标签: silverlight xaml custom-controls templatebinding

我正在开发一个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() - 方法中手动设置宽度和高度?

1 个答案:

答案 0 :(得分:1)

你的XAML看起来很好,使用这样的TemplateBinding是有效的,所以问题必须在你的DependencyProperty中。

高度和宽度是双打。绑定引擎不处理隐式转换。

将您的DP更改为该类型,它应该可以正常工作。