dotnet 9 WPF 支持 Style 的 Setter 填充内容时可忽略 Value 标签

news/发布时间2024/5/20 12:41:12

本文记录 WPF 在 dotnet 9 的一项 XAML 编写语法改进点,此改进点用于解决编写 Style 的 Setter 进行给 Value 赋值时,不能将 Value 当成默认内容,需要多写 Value 标签的问题。通过此改进点可减少两行 XAML 代码

在原先的 WPF 版本里面,对 Style 的 Setter 填充复杂的对象内容时,大概的示例代码如下

<Style TargetType="Button"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button">...</ControlTemplate></Setter.Value></Setter>
</Style>

可以看到 <Setter.Value> 属于不可省略的内容

在本次引入的改进之后,即可将 Setter 的 Value 当成默认内容,从而减少 <Setter.Value> 的代码,改进后的写法如下

<Style TargetType="Button"><Setter Property="Template"><ControlTemplate TargetType="Button">...</ControlTemplate></Setter>
</Style>

此改进是在许多年前,由 Thomas Levesque 大佬在 https://github.com/dotnet/wpf/issues/84 提出的。被微软的 Anjali 在 https://github.com/dotnet/wpf/pull/8534 实现

此变更将影响 XAML 语法,对应的文档也进行了同步更新,详细请看 https://github.com/dotnet/dotnet-api-docs/pull/9581

为什么之前的版本里面,必须编写 <Setter.Value> 呢?这是因为在原先的版本里面 Style 的 Setter 的 Value 不是默认的内容,即在 Setter 标签里面直接放入内容,将不能被放入到 Value 属性里面

在 https://github.com/dotnet/wpf/pull/8534 的实现里面,将 Setter 的 Value 当成默认内容,于是在 Setter 里面放入的内容,将会自动给 Value 进行赋值

上述的核心逻辑在 src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/Baml2006/WpfGeneratedKnownTypes.cs 里面,给创建 Setter 时,配置 baml 类型里面内容对应的属性名是 "Value" 属性名,如以下代码

        private WpfKnownType Create_BamlType_Setter(bool isBamlType, bool useV3Rules){var bamlType = new WpfKnownType(this, // SchemaContext556, "Setter",typeof(System.Windows.Setter),isBamlType, useV3Rules);bamlType.DefaultConstructor = delegate() { return new System.Windows.Setter(); };bamlType.ContentPropertyName = "Value"; // 这是本次更改的核心逻辑bamlType.Freeze();return bamlType;}

当前的 WPF 在 https://github.com/dotnet/wpf 完全开源,使用友好的 MIT 协议,意味着允许任何人任何组织和企业任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。在仓库里面包含了完全的构建逻辑,只需要本地的网络足够好(因为需要下载一堆构建工具),即可进行本地构建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/02748486.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

WDS+MDT网络启动自动部署windows(十七)MDT中文变量,描述,组织单位OU

简介 这简直就是歧视,在MDT使用变量时,数据库设置时,居然不能用中文。 计算机描述,我将在数据库中设置为使用人,主要是其他地方也不方便看。 描述是存在注册表中的,未来自动化也将会使用使用人这个字段,用来注册OCS这样,有标签,使用人字段的软件。 方向 解决MDT/BDD无…

WDS+MDT网络启动自动部署windows(十六)计算机自动进入指定OU

简介 新装计算机总是在默认电脑,不方便配置终端计算机策略权限。 要想办法让MDT装好的计算机,自动进入指定组织单位OU。 dsquery 大概意思是 domain server query ,就是域服务器搜索的意思。 在域控执行 dsquery ou 先看看OU是怎么用LDAP表示的。 从左到右,OU,逐级的组…

OpenVX技术图例(二)

OpenVX技术图例(二) 参考文献链接 https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/docs/tiovx/docs/user_guide/index.html人工智能芯片与自动驾驶

Linux Shell 脚本专题

本文介绍了Linux Shell环境变量和脚本使用的常用知识点。V1.0 2024年5月8日 发布于博客园目录常用环境变量一、环境变量的概念1、环境变量的含义2、环境变量的分类3、Linux环境变量二、常用的环境变量1、查看环境变量2、常用的环境变量三、设置环境量1、系统环境变量2、用户环境…

注册表延长Windows更新时间

打开注册表【Win】+【R】打开运行窗口输入regedit在输入框中输入计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings后回车在右侧空白处选择新建->DWORD(32位)值(D)命名为FlightSettingsMaxPauseDays,选中10进制数据数值为暂停更新的天数。 确定后关…

El-Upload组件上传图片并添加水印

背景 有的时候我们需要在上传图片中添加一些水印标识,然后上传至服务器 效果图代码 <template><div class="app"><!-- 需求:1. 点击直接预览图片,而不需要使用dialog2. 上传图片添加水印后才预览图片思路:上传图片文件添加水印。使用watermark…