0

我正在开发一个 Silverlight CustomControl,它定义了一个名为SpinnerSize. 现在我想将Border默认模板内部的宽度和高度设置为SpinnerSize-property 使用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()在控件的 - 方法中手动设置宽度和高度?

4

1 回答 1

1

您的 XAML 看起来不错,并且像这样使用 TemplateBinding 是有效的,因此问题一定出在您的 DependencyProperty 中。

高度和宽度是双倍的。Binding 引擎不处理隐式强制转换。

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

于 2013-02-19T19:58:09.907 回答