0

。という名前の依存関係プロパティを定義するSilverlightCustomControlを開発していますSpinnerSizeBorder次に、次を使用して、デフォルトテンプレートの内側の幅と高さを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); }
}

その結果、境界線がまったく見えなくなります。境界線の幅と高さを手動で値に設定すると、すべて正常に機能します。

それを達成するための有効な方法ですか、それともコントロールの-methodTemplateBindingで幅と高さを手動で設定する必要がありますか?OnApplyTemplate()

4

1 に答える 1

1

XAMLは正常に見え、このようにTemplateBindingを使用することは有効であるため、問題はDependencyPropertyにある必要があります。

高さと幅は2倍です。Bindingエンジンは、暗黙のキャストを処理しません。

DPをそのタイプに変更すると、正常に動作するはずです。

于 2013-02-19T19:58:09.907 に答える