我声明了一个我想要应用于项目中所有按钮的样式,样式位于ResourceDictionary中:
<Style TargetType="StackPanel">
<Setter Property="Orientation" Value="Horizontal" />
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
现在,在某些窗口中,我想继承此样式但添加一个值:
<Style TargetType="StackPanel">
<Setter Property="Margin" Value="5"/>
</Style>
问题是它不会继承全局样式,为了继承我必须为全局样式分配一个键:
<Style TargetType="StackPanel" x:Key="StackPanelStyle" />
然后在窗口的XAML继承(或/和覆盖 - 可选)它:
<Style TargetType="StackPanel" BasedOn="StackPanelStyle" />
问题是如果你分配一个密钥,它不是全局的,你必须在每个窗口/范围上调用它 .
A solution to my question should be one of the two (还有什么我错过的吗?):
-
具有键的全局样式,可自动应用于整个应用程序中的所有目标控件 .
-
一种在没有并且覆盖它的情况下引用ResourceDictionary级未命名样式的方法 .
我想重新声明命名样式(在ResourceDictionary中)附近实际工作的样式:
<!--In the ResourceDictionary-->
<Style x:Key="StackPanelStyle" TargetType="StackPanel">
<Setter Property="Orientation" Value="Horizontal" />
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
<!--In the app.xaml-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/>
<!--In the window/page scope-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/
但我正在寻找更好的东西,而不是愚蠢地重新宣布所有的风格 .
3 回答
试试这个:
我在App.xaml的ResourceDictionary中声明了我的基本样式,如果我在这样的特定窗口中覆盖它们,它通常可以工作 .
在全局资源字典中的某处,您可以使用键定义基本样式 . 此基本样式的目标类型是您打算应用该样式的所有类型的基础类型 . 然后,您可以定义针对所需类型的样式,并基于上述基本样式 .
现在,最后两个样式将应用于应用程序中的所有IntegerUpDown和DoubleUpDown控件,而无需提及任何键 .
所以基本规则:基本样式必须具有引用它的键,并且派生样式可能不会,因此它们可以在没有任何键的情况下应用 - 仅由目标类型应用 .
我建议您在这里寻找的是主要样式或行为场景,通常通过创建用户控件来实现 . 如果您要创建一个应用了'global'样式的新按钮控件,那么只要添加任何“新样式”或覆盖样式(如果/需要它们),您可以在任何地方使用该控件 .
如果您尚未创建用户控件,则可以轻松实现 .