前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >WPF for .NET 9 中的新增功能

WPF for .NET 9 中的新增功能

作者头像
郑子铭
发布2024-11-23 13:09:10
发布2024-11-23 13:09:10
7200
代码可运行
举报
运行总次数:0
代码可运行

WPF for .NET 9 中的新增功能 原文链接[1]: https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/whats-new/net90?view=netdesktop-9.0

WPF for .NET 9 中的新增功能

本文介绍适用于 .NET 9Windows Presentation Foundation (WPF) 中的新增功能。今年 WPF 的主要关注领域是改进 WPF 的视觉功能,并为 Windows 11 提供基于 Fluent 设计原则的新主题。

您可以通过从 Microsoft Store[2] 下载 WPF 库应用程序来预览新主题。

Fluent 主题

WPF 包含一个新主题,可为 WPF 应用程序提供新鲜、现代的 Windows 11 美感。它包括集成的明暗模式,以及系统强调色支持。

  • 浅色模式下的 Fluent 主题:
  • 深色模式下的 Fluent 主题:

应用主题

可以通过两种方式应用 Fluent 主题:设置属性或引用 Fluent 主题资源字典。有关主题模式设置的更多信息,请参阅 ThemeMode

请将 Fluent 资源加载到应用的资源中。

代码语言:javascript
代码运行次数:0
复制
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

资源字典还可以应用于主题 Window 本身

ThemeMode

WPF 中添加了一个新的样式 API,该 API 通过属性公开。通过使用此属性,您可以应用 Fluent 样式,而不必直接引用样式资源字典。

可用主题:

  • Light应用浅色 Fluent 主题。
  • Dark应用深色 Fluent 主题。
  • System根据用户的当前 Windows 设置应用浅色或深色 Fluent 主题。
  • None(默认)使用 Aero2 主题。

要将主题模式应用于整个应用程序,请在类型上设置属性。要将其应用于单个 Window ,请在类型上设置。

例如,根据 Windows 当前设置的浅色或深色主题来设置整个应用程序的样式:

代码语言:javascript
代码运行次数:0
复制
<Application x:Class="MyWpfProject.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:MyWpfProject"
             StartupUri="MainWindow.xaml"
             ThemeMode="System">

以下是强制使用浅色主题的示例,无论 Windows 设置的主题是什么:

代码语言:javascript
代码运行次数:0
复制
<Window x:Class="MyWpfProject.LightWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyWpfProject"
        Title="LightWindow" Height="450" Width="800"
        ThemeMode="Light">

如果设置为应用程序级别以外的任何值,则无法再应用于窗口级别。

ThemeMode 旨在尊重 Fluent Dictionary 设置的设置,允许您自定义 Fluent 主题。

在代码中设置

目前,支持在代码中更改设置是一项实验性功能。在代码中访问属性会产生错误 WPF0001,从而阻止访问 API。请抑制该错误以访问 API

警告首先,将以下元素添加到项目文件中以禁止显示错误:PropertyGroupAPI 是实验性的,可能会发生更改。

首先,将以下元素添加到项目文件中以禁止显示错误:PropertyGroup

代码语言:javascript
代码运行次数:0
复制
<PropertyGroup>
    <NoWarn>$(NoWarn);WPF0001</NoWarn>
</PropertyGroup>

提示 您可以使用该指令在发生错误的位置禁止显示错误,而不是为整个项目禁用该错误。#pragma warning disable WPF0001

接下来,在应用程序级别或窗口级别设置该属性:ThemeMode

代码语言:javascript
代码运行次数:0
复制
// Set light mode at the application-level
Application.Current.ThemeMode = ThemeMode.Light;

// Set dark mode on the current window
this.ThemeMode = ThemeMode.Dark;

支持 Windows 强调色

Windows 10 引入了一种用户可选择的主题色,用于提供个人风格或调出特定的视觉元素。WPF 现在支持用户选择的主题色。

视觉颜色可用作 System.Windows.Media.ColorSystem.Windows.Media.SolidColorBrushSystem.Windows.ResourceKey。除了颜色本身,还有强调色的浅色和深色可供选择。这些可通过 System.Windows.SystemColors 访问:

Color

Color Resource Key

Brush

Brush Resource Key

Accent

AccentColor

AccentColorKey

AccentColorBrush

AccentColorBrushKey

Light 1

AccentColorLight1

AccentColorLight1Key

AccentColorLight1Brush

AccentColorLight1BrushKey

Light 2

AccentColorLight2

AccentColorLight2Key

AccentColorLight2Brush

AccentColorLight2BrushKey

Light 3

AccentColorLight3

AccentColorLight3Key

AccentColorLight3Brush

AccentColorLight3BrushKey

Dark 1

AccentColorDark1

AccentColorDark1Key

AccentColorDark1Brush

AccentColorDark1BrushKey

Dark 2

AccentColorDark2

AccentColorDark2Key

AccentColorDark2Brush

AccentColorDark2BrushKey

Dark 3

AccentColorDark3

AccentColorDark3Key

AccentColorDark3Brush

AccentColorDark3BrushKey

重要 主题色可带或不带 Fluent 主题。

创建使用强调色的 UI 时,将资源键包装在动态资源中。当用户在打开应用时更改强调色时,应用中的颜色会自动更新。例如,以下是将前景色设置为用户选择的强调色的 UITextBlock

代码语言:javascript
代码运行次数:0
复制
<TextBlock Text="First Name:"
           Foreground="{DynamicResource {x:Static SystemColors.AccentColorBrushKey}}" />

基于连字符的连字符支持

WPF 从未支持 UI 控件中的连字符,例如。这个长期存在的社区问题已添加到 .NET 9.TextBlock

这是一张未应用于 .NET 8 中的字形的连字符图像:

现在,在 .NET 9 中呈现的相同文本:

BinaryFormatter 不再受支持

BinaryFormatter 被认为不安全,因为它容易受到反序列化攻击,从而导致拒绝服务 (DoS)、信息泄露或远程代码执行。它是在反序列化漏洞被充分理解之前实现的,其设计不符合现代安全最佳实践。

.NET 9 开始,其实现已被删除,以防止这些安全风险。使用时,会引发异常。BinaryFormatterPlatformNotSupportedException

WPF 在许多场景中使用,例如在序列化剪贴板和拖放操作的数据时。在内部,WPF 继续使用更安全的子集来处理具有已知类型集的特定用例。BinaryFormatterBinaryFormatter

有关更多信息,请参阅 WPF migration guide for BinaryFormatter[3]WPF 迁移指南。

下载 .NET 9[4]

NET 9 发布公告[5]

参考资料

[1]

原文链接: https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/whats-new/net90?view=netdesktop-9.0

[2]

Microsoft Store: https://www.microsoft.com/store/productId/9NDLX60WX4KQ

[3]

WPF migration guide for BinaryFormatter: /dotnet/standard/serialization/binaryformatter-migration-guide/wpf-applications

[4]

下载 .NET 9: https://dotnet.microsoft.com/zh-cn/download/dotnet/9.0

[5]

NET 9 发布公告: https://devblogs.microsoft.com/dotnet/announcing-dotnet-9/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WPF for .NET 9 中的新增功能
    • Fluent 主题
      • 应用主题
    • ThemeMode
      • 在代码中设置
    • 支持 Windows 强调色
    • 基于连字符的连字符支持
    • BinaryFormatter 不再受支持
      • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档