|
1
141
我认为简单的答案是,你不能做(至少在这个版本的WPF中)你想做的事情。 也就是说,对于任何特定元素,只能应用一种样式。
然而,正如其他人上面所说,也许你可以使用
所以,这里的想法。..如果你能以某种方式分离你想要设置的属性。..根据要设置多个样式的元素的继承层次结构。..您可能有一个解决方法。
注:
有一件事特别要注意。如果你改变
|
|
|
2
40
Bea Stollnitz a good blog post 在“如何在WPF中设置多个样式?”的标题下,关于为此使用标记扩展 那个博客现在已经死了,所以我在这里转载这篇文章:
|
|
3
30
但你可以从另一个延伸。请查看BasedOn属性
|
|
|
4
17
WPF/XAML本身不提供此功能,但它确实提供了可扩展性,允许您做您想做的事情。 我们遇到了同样的需求,最终创建了我们自己的XAML标记扩展(我们称之为“MergedStylesExtension”),以允许我们从另外两个样式创建新的样式(如果需要,可以连续多次使用,以继承更多样式)。 由于WPF/XAML错误,我们需要使用属性元素语法来使用它,但除此之外,它似乎还可以正常工作。例如。,
|
|
|
5
3
这可以通过创建一个辅助类来使用和包装您的样式来实现。提到的复合风格 here 显示了如何做到这一点。有多种方法,但最简单的方法是执行以下操作:
希望这能有所帮助。 |
|
|
6
2
使用
用法:(指向 xmlns:local=“clr-namespace:style_a_class_like_css” 到正确的命名空间)
结果:
|
|
|
7
1
如果你没有接触任何特定的属性,你可以获得样式的所有基本和公共属性,其目标类型将是FrameworkElement。然后,您可以为所需的每种目标类型创建特定的口味,而无需再次复制所有这些常见属性。 |
|
|
8
1
如果使用StyleSelector将其应用于一组项目,您可能会得到类似的结果,我用它来解决类似的问题,即根据树中的绑定对象类型在TreeViewItems上使用不同的样式。您可能需要稍微修改下面的类以适应您的特定方法,但希望这能让您开始学习
然后,您可以这样应用它 <TreeView>
<TreeView.ItemContainerStyleSelector
<myassembly:MyTreeStyleSelector DefaultStyle="{StaticResource DefaultItemStyle}"
NewStyle="{StaticResource NewItemStyle}" />
</TreeView.ItemContainerStyleSelector>
</TreeView>
|
|
|
9
1
有时,您可以通过嵌套面板来实现这一点。假设你有一个改变前景的样式,另一个改变字体大小的样式,你可以在文本块上应用后者,并将其放入其样式为第一个的网格中。这可能会有所帮助,在某些情况下可能是最简单的方法,尽管它不会解决所有问题。 |
|
|
10
1
当你覆盖SelectStyle时,你可以通过反射获得GroupBy属性,如下所示:
|
|
11
0
如果你试图将一种独特的风格只应用于一个元素 作为基础样式的补充,有一种完全不同的方法来实现这一点,在我看来,这对可读性和可维护性的代码来说要好得多。 需要调整每个元素的参数是非常常见的。定义仅用于一个元素的字典样式对于维护或理解来说非常麻烦。为了避免只为一次性元素调整而创建样式,请在此处阅读我对自己问题的回答: |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |
|
|
Barta · WPF MVVM不更新视图 1 年前 |
|
|
Denis Ivanov · WPF控件在属性更改时不会更新 1 年前 |
|
|
codymanix · WPF:TextBlock周围可见小边框? 1 年前 |
|
|
Nostromo · 来自背景对象的工具提示 1 年前 |
|
|
Nuvolari · 从可观测集合添加/删除时出现对象处理异常 2 年前 |
|
|
CCarter · 只能在设计器中DependencyObject的DependencyProperty上设置显示“Binding”的WPF ICommand DependencyProperties[重复] 2 年前 |
|
|
Thern · 在UI线程(WPF)上的void方法中调用异步函数 2 年前 |