1

我的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>

我想创建一个相同的样式,但更改Styleinner 的属性ToggleButton

我可以在不复制样式定义的情况下做到这一点吗?我应该使用该BasedOn物业吗?

4

2 回答 2

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>
于 2013-04-04T13:31:53.157 回答
1

如果控件是您自己的,我将始终为样式、模板等添加新的依赖属性。例如,如果您有一个自定义 ItemsControl,其中模板包含 ScrollViewer,我将添加一个依赖属性ScrollViewerStyle。如果它不是您的控件或基本控件之一,您始终可以为此使用附加属性。就像是

<TextBox myNs:TextBoxStyle.ScrollViewerStyle="{StaticResource myScrollViewer}"/>

TextBoxStyle只是一个简单的类,带有一个名为ScrollViewerStyle. 当然,您应用的样式和模板必须使用此附加属性。但在那之后,您可以轻松地在任何 TextBox 上更改它。

于 2013-04-04T13:52:15.010 回答