gpt4 book ai didi

c# - WPF - 将字典中定义的样式与父控件中定义的样式混合

转载 作者:太空狗 更新时间:2023-10-29 23:11:10 26 4
gpt4 key购买 nike

我在资源字典中定义按钮控件的自定义外观:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Button" x:Key="BaseButtonStyle">
<Setter Property="Background" Value="Blue"/>
</Style>
</ResourceDictionary>

然后我尝试在按钮所在的窗口中更改样式。

<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
<ResourceDictionary>
<Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Foreground" Value="Red"/>
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>

在 WPF 设计器中,我得到了我所期望的。带有红色文本的蓝色按钮。但在运行时,两种样式均未应用,按钮具有默认颜色。我该如何解决这个问题?

最佳答案

下面的那个有效。我只是将 Style 移出 MergedDictionaries 并将其放在外部 ResourceDictionary 上。

<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>

<Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Foreground" Value="Red"/>
</Style>
</ResourceDictionary>
</Window.Resources>

在您的原始 XAML 中,我不确定为什么设计器能够正确呈现它而 WPF 运行时却不能。 MSDN documentation虽然说:

合并的 ResourceDictionary 没有在标记中定义的资源元素。相反,合并后的字典是一个没有定义标记子元素(或没有通过代码添加任何元素)的 ResourceDictionary,但具有为 Source 指定的 URI。

这可能与它有关。

关于c# - WPF - 将字典中定义的样式与父控件中定义的样式混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3778746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com