2

すべて、私は以下のセットをBorder持つ私たちのカスタムコントロールに取り組んでいますBackground

<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    <GradientStop Color="#FFF7F7F7" Offset="0.164" />
    <GradientStop Color="#FFDBDBDB" Offset="0.664" />
    <GradientStop Color="#FFB3B3B3" Offset="0.978" />
</LinearGradientBrush>

ただし、ユーザーがこれをオーバーライドできるようにしたいと考えています。タイプ の依存関係プロパティを作成しましたBrushが、バックグラウンドにバインドする方法がわかりませんが、XAML にこのデフォルトが残っています。これは可能ですか?

4

1 に答える 1

2

TemplateBinding マークアップ拡張機能を見てください。

<Style TargetType="{x:Type your:YourControl}">
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FFF7F7F7" Offset="0.164" />
                <GradientStop Color="#FFDBDBDB" Offset="0.664" />
                <GradientStop Color="#FFB3B3B3" Offset="0.978" />
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>

次に、デフォルトの ControlTemplate の一部で:

<Border Background="{TemplateBinding Background}">
  ....
</Border>

これにより、消費者はスタイルで定義されたものを維持しながら、デフォルトの背景をオーバーライドできます。

<your:YourControl/> <!-- Will use default Background -->

<your:YourControl Background="Green"/> <!-- will have Green background -->
于 2013-04-15T20:22:14.337 に答える