首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在app.xaml中设置默认的窗口样式?

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

Stack Overflow用户
提问于 2009-01-10 23:11:22
回答 8查看 89K关注 0票数 65

我正尝试在我的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 designer中),我可以通过以下方式明确告诉窗口使用此样式,从而使窗口以此样式出现:

Style="{DynamicResource WindowStyle}

这是可行的,但并不理想。那么我该如何:

  1. 让所有窗口自动使用该样式(这样我就不必在每个窗口上都指定它)?
  2. 让VS designer显示样式?

谢谢!

EN

回答 8

Stack Overflow用户

发布于 2009-01-20 10:34:40

补充一下Ray所说的:

对于样式,您需要提供一个键/ID或指定一个TargetType。

如果某个WPF没有明确指定的样式,它将始终使用自己的类型作为key

  • Programming WPF( ,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/初始化/加载阶段设置一次样式属性。然后,所有派生都会自动应用该样式。但设计者不会注意到您的样式您需要运行应用程序才能看到应用的样式。我猜设计器只是运行XAML (这是自动/设计器生成的代码),所以应用了InitializeComponent,而不是自定义的XAML

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

票数 49
EN

Stack Overflow用户

发布于 2012-03-28 05:11:42

我知道这是几年后的事了,但既然问题还在这里...

  1. 在项目中创建资源字典(右键单击项目...)

我将在项目下创建一个名为"Assets“的新文件夹,并将”Assets“放入其中。

  • 将代码添加到您的Project XAML文件中,在Window下添加以下内容:

参考下面的网站:Trouble referencing a Resource Dictionary that contains a Merged Dictionary“有一个错误:如果你所有的默认样式都嵌套在三层(或更深)的合并字典中,顶级字典不会被标记,所以搜索会跳过它。解决办法是将默认样式放到根字典中。”而且它似乎能可靠地解决问题。去图...

  • ,最后,在Window下,可能在Title之后,但在最后一个窗口'>‘之前:

Style="{DynamicResource windowStyle}"

  • And您需要将第3步和第4步中的代码添加到要应用样式的每个项目中。

  • 如果要使用渐变背景而不是纯色,请将以下代码添加到resourceDict.XAML:

  • 并修改您的样式设置器,使其背景颜色为:

如上所述,步骤3和4需要在每个project.XAML文件中重复,但是,您可以在整个解决方案中获得统一的窗口!同样的过程也可以应用于任何你想要有一个统一的外观的控件,按钮,任何东西。

对于这么晚才来的任何人,希望这篇文章能有所帮助,因为我相信最初的海报几年前就已经解决了这一问题。

保罗

票数 24
EN

Stack Overflow用户

发布于 2009-01-10 23:23:19

设计器不工作,因为您正在指定DynamicResource。请将其更改为StaticResource,一切都会好起来的。

若要应用于所有窗口,应从样式中删除x:键。隐式设置TargetType会将x:Key设置为TargetType中的任何内容。然而,在我的测试中,这不起作用,所以我正在研究它。

如果我将TargetType设置为x: TextBlock类型,那么设计器就能完美地工作,只是窗口显示出不同的行为。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/431940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档