作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 WPF 中,如何将多种样式应用于 FrameworkElement
?例如,我有一个已经有样式的控件。我还有一个单独的风格,我想在不破坏第一个风格的情况下添加它。这些样式具有不同的 TargetType,因此我不能仅用其中一种来扩展另一种。
最佳答案
我认为简单的答案是您无法(至少在这个版本的 WPF 中)做您想要做的事情。
也就是说,对于任何特定元素只能应用一种样式。
但是,正如其他人上面所说,也许您可以使用 BasedOn
来帮助您。查看以下松散的 xaml 片段。在其中您将看到我有一个基本样式,它正在设置一个属性,该属性存在于我想要应用两种样式的元素的基类上。并且,在基于基本样式的第二个样式中,我设置了另一个属性。
所以,这里的想法...是如果您可以以某种方式分离您想要设置的属性...根据您想要设置多种样式的元素的继承层次结构...您可能会解决方法。
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="baseStyle" TargetType="FrameworkElement">
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
<Style TargetType="Button" BasedOn="{StaticResource baseStyle}">
<Setter Property="Content" Value="Hello World"/>
</Style>
</Page.Resources>
<Grid>
<Button Width="200" Height="50"/>
</Grid>
</Page>
注意:
有一点需要特别注意。如果将第二个样式(上面第一组 xaml 中)中的 TargetType
更改为 ButtonBase
,则不会应用这两个样式。但是,请查看下面的 xaml 以绕过该限制。基本上,这意味着您需要为样式提供一个键并使用该键引用它。
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="baseStyle" TargetType="FrameworkElement">
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
<Style x:Key="derivedStyle" TargetType="ButtonBase" BasedOn="{StaticResource baseStyle}">
<Setter Property="Content" Value="Hello World"/>
</Style>
</Page.Resources>
<Grid>
<Button Width="200" Height="50" Style="{StaticResource derivedStyle}"/>
</Grid>
</Page>
关于.net - 如何在WPF中应用多种样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16096/
我是一名优秀的程序员,十分优秀!