我正在使用HandyControls WPF库,但我想调整其默认样式之一。我想使用应用EventSetter的样式向所有NumericUpDown控件添加'OnClick'事件。我想将此样式应用于应用程序中的所有NumericUpDown,就像HandyControls自己的NumericUpDownBaseStyle一样。
我有一个Generic.xaml文件。我知道它可以工作,因为我已经为我们的一个自定义UserControls(HandyControls库没有自己的样式)提供了样式,并且该样式将 * 默认 * 应用于该自定义控件的所有示例。
但是当我在 * Generic.xaml * 中添加以下内容时:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:hc="https://handyorg.github.io/handycontrol"
x:Class="Generic">
<Style BasedOn="{hc:StaticResource NumericUpDownBaseStyle}" TargetType="hc:NumericUpDown">
<EventSetter Event="MouseDown" Handler="OnClick"/>
<Setter Property="Background" Value="Red"/>
</Style>
样式不会应用于NumericUpDown的示例。相反,NumericUpDown控件仍使用HandyControls中的默认样式。
如果我把这个样式放到一个全局资源字典中(自从发现Generic.xaml后,我就试图淘汰这个字典),样式 * 就被应用了,我可以看到我的NumericUpDowns变成了红色。
为什么我的Generic.xaml文件不能优先于HandyControls中定义的样式?我如何解决这个问题?
2条答案
按热度按时间dwthyt8l1#
Generic.xaml
用于定义控件的默认样式。它不用于扩展或重写在其他程序集中定义的控件的默认样式。您应该使用“全局”样式来完成此操作,即将基于
NumericUpDownBaseStyle
的自定义样式直接放在App.xaml
中,或者放在从App.xaml
合并的资源字典中。不要将其放在Generic.xaml
中。dxxyhpgq2#
我几天前发布了我自己的答案,但是那个答案已经被删除了?太好了。
最后,我通过将外部库合并到Generic.xaml顶部的字典中来解决这个问题。我仍然不知道为什么要这样做。