重用WPF样式 - 更改子属性

时间:2013-04-04 12:42:23

标签: c# wpf .net-4.0 wpf-4.0

我的Expander样式定义如下:

<Style x:Key="MyStyle" TargetType="{x:Type Expander}">
    <Setter ... />
    <!-- More setters -->

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Expander}">
                <Border>
                    <DockPanel>
                        <ToggleButton x:Name="ChangeStyleHere" ... />
                        <Border ... />
                    </DockPanel>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我想创建一个相同的样式,但更改内部Style的{​​{1}}属性。

我可以在不重复样式定义的情况下执行此操作吗?我应该使用ToggleButton属性吗?

2 个答案:

答案 0 :(得分:1)

这是我目前的方法,我想知道是否有更好的方法:

<Style x:Key="MyStyle" TargetType="{x:Type Expander}">
    <Setter ... />
    <!-- More setters -->

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Expander}">
                <Border>
                    <DockPanel>
                        <ToggleButton x:Name="ChangeStyleHere" Style="{DynamicResource InnerStyle}" />
                        <Border ... />
                    </DockPanel>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="DerivedStyle" TargetType="{x:Type Expander}" BasedOn="{StaticResource MyStyle}">
    <Style.Resources>
        <Style x:Name="InnerStyle" ... />
    </Style.Resources>
</Style>

答案 1 :(得分:1)

如果控件是你自己的,我总是会为样式,模板等添加一个新的依赖属性。例如,如果你有一个自定义ItemsControl,模板包含一个ScrollViewer,我会添加一个依赖属性{{1 }}。如果它不是您的控件或其中一个基本控件,您可以随时使用附加属性。像

这样的东西
ScrollViewerStyle

<TextBox myNs:TextBoxStyle.ScrollViewerStyle="{StaticResource myScrollViewer}"/> 只是一个简单的类,其中包含一个名为TextBoxStyle的附加属性。当然,您应用的样式和模板必须使用此附加属性。但之后您可以在任何TextBox上轻松更改它。