我的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
属性吗?
答案 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上轻松更改它。