gpt4 book ai didi

wpf - 从应用程序样式 (WPF) 继承

转载 作者:行者123 更新时间:2023-12-04 22:02:49 25 4
gpt4 key购买 nike

我正在尝试为某个 Window 继承应用程序级样式在我的 WPF 应用程序中,但我无法让它继承而不是简单地覆盖现有样式。

在 App.xaml(在 App.Resources element 下)我定义了一个样式:

<Style TargetType="Button">
<Setter Property="Padding" Value="6"/>
<Setter Property="FontWeight" Value="Bold"/>
</Style>

而在 XAML 论坛中,某个 Window , 我在 Window.Resources 下定义了以下内容:
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Padding" Value="6"/>
<Setter Property="FontWeight" Value="Bold"/>
</Style>

这里的问题是前者(应用程序)样式被忽略,就好像后者(窗口)样式已经覆盖它一样。 BasedOn属性已设置,据我所知,它旨在指示应继承现有样式。删除该属性也无济于事。我能想到的唯一潜在原因是 {StaticResource {x:Type Button}}仅指默认的 WPF 样式,而不是我在 App.xaml 中定义的样式。

我知道使用 x:Key 可以完成这种样式行为。属性,但我希望有一种更优雅的方式,允许我将具有继承的样式应用于范围内的所有控件(即应用程序/窗口)。

更新

感谢您的两个回复。在示例应用程序中,事情按预期工作确实是正确的。不同的是我无意中没有提到 App.xaml中的样式包含在 ResourceDictionary 中, 像这样:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>

<ResourceDictionary Source="SettingsDictionary.xaml"/>

<ResourceDictionary>

<Style x:Key="DefaultButton" TargetType="Button">
<Setter Property="Padding" Value="4"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>

</ResourceDictionary>

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

关于如何在这种情况下补救问题的任何建议?

最佳答案

编辑

经过一番研究,我发现如果设置了 TargetType,则会自动生成 x:Key。因此,App.xaml 中的样式是正确的。但是,wpf 设计器缺乏一些资源处理技巧,并且没有同时显示这两种样式。如果您构建并运行该项目,则将应用这两种样式。

你的机器和 VS2008 的行为就像我测试你的代码的机器一样。

希望这可以帮助。

编辑 2

App.xaml 中的资源和合并字典一直很古怪。
我通过将第一个样式声明移出合并字典解决了这个问题,如下所示:

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

<!--<ResourceDictionary Source="SettingsDictionary.xaml"/>-->

</ResourceDictionary.MergedDictionaries>

<Style TargetType="Button">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Padding" Value="4"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>

</ResourceDictionary>
</Application.Resources>

还要注意,给样式一个显式设置的键而不是 {x:Type Button}将使其成为非默认样式并使其不自动应用。

一般建议只为来自另一个文件的资源指定合并字典,并在默认空间中编码资源,如上。

关于wpf - 从应用程序样式 (WPF) 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1097649/

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