wpf - 如何在app.xaml中设置默认的WPF窗口样式?

标签 wpf c#-3.0 themes styles

我正在尝试在 app.xaml 中为 WPF Windows 应用程序中的每个窗口设置默认样式。到目前为止,我在 app.xaml 中有这个:

<Application.Resources>
    <ResourceDictionary>
        <Style x:Key="WindowStyle" TargetType="{x:Type Window}">
            <Setter Property="Background" Value="Blue" />
        </Style>
    </ResourceDictionary>
</Application.Resources>

通过专门告诉窗口使用此样式,我可以在运行应用程序时(但不是在 VS 设计器中)让窗口以此样式显示:

Style="{DynamicResource WindowStyle}

这可行,但并不理想。那么我该怎么办:

  1. 所有窗口都自动使用该样式(这样我就不必在每个窗口上指定它)吗?
  2. VS设计师有展示风格吗?

谢谢!

最佳答案

补充雷所说的内容:

对于样式,您需要提供键/ID 或指定目标类型。

If a FrameworkElement does not have an explicitly specified Style, it will always look for a Style resource, using its own type as the key
- Programming WPF (Sells, Griffith)

如果您提供 TargetType,则该类型的所有实例都将应用该样式。然而派生类型不会......看起来。 <Style TargetType="{x:Type Window}">不适用于您所有的自定义派生/窗口。 <Style TargetType="{x:Type local:MyWindow}">仅适用于 MyWindow。所以选项是

  • 使用您指定的键控样式作为要应用该样式的每个窗口的 Style 属性。设计器将显示样式化的窗口。

.

    <Application.Resources>
        <Style x:Key="MyWindowStyle">
            <Setter Property="Control.Background" Value="PaleGreen"/>
            <Setter Property="Window.Title" Value="Styled Window"/>
        </Style>
    </Application.Resources> ...
    <Window x:Class="MyNS.MyWindow" Style="{StaticResource MyWindowStyleKey}">  ...
  • 或者您可以从自定义 BaseWindow 类(其中具有 its own quirks )派生,您可以在 Ctor/Initialization/Load 阶段设置一次 Style 属性。所有派生都会自动应用该样式。 但是设计器不会注意到你的样式你需要运行你的应用程序才能看到正在应用的样式。我猜设计器只是运行InitializeComponent(这是自动/设计器生成的代码)因此应用 XAML,但不应用自定义代码隐藏。

所以我想说明确指定的样式是最少的工作。无论如何,您都可以集中更改样式的各个方面。

关于wpf - 如何在app.xaml中设置默认的WPF窗口样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/431940/

相关文章:

wpf - 本地化 Xceed DataGrid

c# - 派生 FixedDocument 的序列化

c# - 如何在 WPF 中强制显示工具提示

c# - 部分修改 XML 序列化文档

delphi - 是否可以通过在运行时添加应用程序 list 来执行 **运行时主题** 的运行时可选切换?

c# - 使用嵌套资源字典动态更改 wpf 中的主题

windows - 在 Windows 中编程的编码配色方案,而不仅仅是 Visual Studio

c# - 在wpf中格式化印度卢比

.net - 将多个数组聚合为一个数组 (Linq)

c# - 在运行时停止/启动 WCF MEX 服务