gpt4 book ai didi

.net - 覆盖 App.xaml 中的标准主题

转载 作者:行者123 更新时间:2023-12-03 23:46:32 25 4
gpt4 key购买 nike

我正在使用标准的 WPF 主题 Aero.NormalColor.xaml。而且效果很好。然而对于整个申请 ,我想将文本框的前景色覆盖为红色。

我的第一次尝试是

<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="TextBox">
<Setter Property="Foreground" Value="Red" />
</Style>
</ResourceDictionary>
</Application.Resources>

嗯......文本框的所有前景色都变成红色。然而,所有的文本框都失去了主题风格。是的,我知道我应该添加“BasedOn”。我的第二次尝试是在样式标签中添加“BasedOn”。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Foreground" Value="Red" />
</Style>
</ResourceDictionary>
</Application.Resources>

抛出异常。与此相同 WPF : Extend Theme's style - StackOverflowException

最终,我通过这个实现了我的目标。

在 App.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

在所有窗口和用户控件中,我必须明确设置
<UserControl.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Foreground" Value="Red" />
</Style>
</UserControl.Resources>

以上代码多次复制粘贴,不易维护。有谁知道如何通过 将前景设置为红色来实现我的目标一次 ?

最佳答案

我想你可以添加 StyleResourceDictionary并将其与 Aero 主题合并,如下所示:

<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>

<!-- Adding the style to a resource dictionary -->
<ResourceDictionary>
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Foreground" Value="Red" />
</Style>
</ResourceDictionary>

</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

这应该为您的所有文本框提供红色前景色,而无需在每个窗口和用户控件上明确指定。

关于.net - 覆盖 App.xaml 中的标准主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780817/

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