XAML格式化工具:XAML Styler
XAML格式化的意义
在开发WPF应用过程中,编写XAML时需要手动去缩进或者换行,随着时间的推移或者参与开发的人增多,XAML文件内容的格式会越来越乱。要么属性全都写在一行,内容太宽一屏无法完整展现;要么属性单独占一行,难以直观的看清结构;另外xaml元素的属性无序,重要属性查找困难,手动维护属性使之规律有序也比较费时。
格式化XAML代码可以使代码布局整齐,减少冗余空格和换行符,使代码结构清晰、缩进一致。使代码更易于阅读和理解,开发人员能够更快速地编写和修改代码。此外,还可以确保整个项目中的代码风格一致,对于团队协作和代码维护非常重要。然而微软官方并未提供很好的XAML格式化方案,不过Visual Studio Marketplace中有个非常好用的插件XAML Styler。
安装配置XAML Styler
在Visual Studio的扩展管理窗口中,搜索XAML Styler下载安装后重启Visual Studio即可完成安装。在"工具"->"选项"中找到"XAML Styler"可以进行详细配置。每一项具体含义参见配置项说明

如果需要在XAML编辑器执行保存时自动格式化,需要把Format XAML on save设置为true。如果想手动格式化,则直接在XAML编辑器中右键菜单点击Format XAML或者使用快捷键进行格式化。

统一格式化标准
在团队开发中,即便所有的人都使用XAML Styler,也可能因个人习惯不同选择不同的设置,也会带来很多麻烦。针对这个问题,XAML Styler也提供了解决方案。
在项目的根目录创建一个名为"Settings.XamlStyler"的文件(不必引入到项目中),内容可参考Default Configuration,XAML Styler会根据这个文件而不是Visual Studio中的全局配置进行格式化,既解决了项目的统一格式化标准问题,也允许开发人员按照自己的习惯开发非团队项目。
"Settings.XamlStyler"配置项及注释如下,大家可根据自身习惯酌情修改
{
"IndentSize": 4, //缩进空格数,4【默认】
"IndentWithTabs": false //是否使用制表符进行缩进,false【默认】
"AttributesTolerance": 2, //单行最大属性数,2【默认】,如果元素属性数不大于此数就不会换行
"KeepFirstAttributeOnSameLine": false, //第一个属性是否与开始标记在同一行,false【默认】
"MaxAttributeCharactersPerLine": 0, //多个属性大于多少个字符就该换行,0【默认】
"MaxAttributesPerLine": 1, //大于几个属性就该换行,1【默认】
"NewlineExemptionElements": "RadialGradientBrush, GradientStop, LinearGradientBrush, ScaleTransform, SkewTransform, RotateTransform, TranslateTransform, Trigger, Condition, Setter", //属性不应该跨行中断的元素
"SeparateByGroups": false, //是否应该按照属性的分组进行分行,false【默认】
"AttributeIndentation": 0, //属性缩进空格字符数(-1不缩进;0【默认】缩进4个空格;其它个数则指定)
"AttributeIndentationStyle": 1, //属性缩进风格(0混合,视情况使用制表符和空格;1【默认】使用空格)
"RemoveDesignTimeReferences": false, //是否移除自动添加的控件和设计时引用内容,false【默认】
"IgnoreDesignTimeReferencePrefix": false, //排序时是否忽略带有设计时引用命名空间前缀的属性,false【默认】
"EnableAttributeReordering": true, //是否启用属性的自动排序,true【默认】
/*属性排序和分组规则*/
"AttributeOrderingRuleGroups": [
"x:Class",
"xmlns, xmlns:x",
"xmlns:*",
"x:Key, Key, x:Name, Name, x:Uid, Uid, Title",
"Grid.Row, Grid.RowSpan, Grid.Column, Grid.ColumnSpan, Canvas.Left, Canvas.Top, Canvas.Right, Canvas.Bottom",
"Width, Height, MinWidth, MinHeight, MaxWidth, MaxHeight",
"Margin, Padding, HorizontalAlignment, VerticalAlignment, HorizontalContentAlignment, VerticalContentAlignment, Panel.ZIndex",
"*:*, *",
"PageSource, PageIndex, Offset, Color, TargetName, Property, Value, StartPoint, EndPoint",
"mc:Ignorable, d:IsDataSource, d:LayoutOverrides, d:IsStaticText",
"Storyboard.*, From, To, Duration",
"TargetType",
"BasedOn"
],
"FirstLineAttributes": "x:Name,Grid.Row,Grid.Column", //应该在第一行的属性,例如x:Name 和x:Uid等等,None【默认】
"OrderAttributesByName": true, //是否按照属性名称进行排序
"PutEndingBracketOnNewLine": false, //结束括号是否独占一行,false【默认】
"RemoveEndingTagOfEmptyElement": true, //是否移除空元素的结束标签,true【默认】
"SpaceBeforeClosingSlash": true, //自闭合元素的末尾斜杠前是否要有空格,true【默认】
"RootElementLineBreakRule": 0, //是否将根元素的属性分成多行(0【默认】;1始终;2从不)
"ReorderVSM": 2, //是否重新排序visualstateManager(0未定义;1移到最前;2【默认】移到最后)
"ReorderGridChildren": false, //是否重新排序Grid的子元素,false【默认】
"ReorderCanvasChildren": false, //是否重新排序Canvas的子元素,false【默认】
"ReorderSetters": 0, //是否重新排序Setter(0【默认】不排序;1按属性名;2按目标名;3先按目标名再按属性名)
"FormatMarkupExtension": true, //是否格式化标记扩展的属性,true【默认】
"NoNewLineMarkupExtensions": "x:Bind, Binding", //始终放在一行上的标记扩展,"x:Bind, Binding"【默认】
"ThicknessSeparator": 2, //Thickness类型的属性应该用哪种分隔符(0不格式化;1空格;2【默认】逗号)
"ThicknessAttributes": "Margin, Padding, BorderThickness, ThumbnailClipMargin", //被认定为Thickness的元素应该是哪些,"Margin, Padding, BorderThickness, ThumbnailClipMargin"【默认】
"FormatOnSave": true, //是否在保存时进行格式化,true【默认】
"CommentPadding": 2, //注释的间距应该是几个空格,2【默认】
}
部分属性配置选项
- AttributeIndentationStyle
- Mixed = 0 混合,视情况使用制表符和空格
- Spaces = 1 【默认】使用空格
- RootElementLineBreakRule
- Default = 0 【默认】
- Always = 1 始终
- Never = 2 从不
- ReorderVSM
- None = 0 未定义
- First = 1 移到最前
- Last = 2 【默认】移到最后
- ReorderSetters
- None = 0 【默认】不排序
- Property = 1 按属性名
- TargetName = 2 按属性名
- TargetNameThenProperty = 3 先按目标名再按属性名
- ThicknessSeparator
- None = 0 不格式化
- Space = 1 空格
- Comma = 2 【默认】逗号
如果对于上述配置中每一项的注释没有直观的感受,可以通过wiki查看每项配置对应代码格式化后的效果。
XAML格式化工具:XAML Styler的更多相关文章
- WP 开发中.xaml 与.xaml.cs
关于 WP 开发中.xaml 与.xaml.cs 的关系 今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: ...
- [XAML] 使用 XAML 格式化工具:XAML Styler
1. XAML 的问题 刚入门 WPF/UWP 之类的 XAML 平台,首先会接触到 XAML 这一新事物.初学 XAML 时对它的印象可以归纳为一个词:一坨. 随着我在 XAML 平台上工作的时间越 ...
- 关于 WP 开发中.xaml 与.xaml.cs 的关系
今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...
- XAML UserControl的继承
欢迎访问Heroius博客:崩溃的脑壳查看文章原文! 前言 相信不少学习WPF和Silverlight的同学们都出于Winform的习惯,希望能够在新展示层框架中实现控件的继承.本文就是说明如何实现这 ...
- 背水一战 Windows 10 (26) - XAML: x:DeferLoadStrategy, x:Null
[源码下载] 背水一战 Windows 10 (26) - XAML: x:DeferLoadStrategy, x:Null 作者:webabcd 介绍背水一战 Windows 10 之 XAML ...
- 【WPF系列】基础学习-XAML
引言 WPF框架中已经提到,WPF框架提供XAML基本服务.WPF中XAML的引入向开发者提供UI设计和代码分离的编程型.XAML是WPF中提出的一个具有重要意义的新技术,基本涉及WPF中所有UI开发 ...
- WPF整理-XAML构建后台类对象
1.XAML 接触WPF的第一眼就是XAML---XAML是用来描绘界面的.其实不然! "Actually, XAML has nothing to do with UI. It's mer ...
- WPF学习之路(二) XAML
在WPF中引入了XAML语言,主要用于界面设计,业务逻辑则使用C#实现后台代码,将界面设计与业务逻辑分离 XAML是一种声明式语言,类似XML\HTML 示例: <!--Start Tag--& ...
- XAML: x:DeferLoadStrategy, x:Null
x:DeferLoadStrategy="Lazy" - 用于指定一个 UIElement 为一个延迟加载元素 x:Null - null 示例1.x:DeferLoadStrat ...
- [WP8.1UI控件编程]Windows Phone XAML页面的编译
1.1.2 XAML页面的编译 Windows Phone的应用程序项目会通过Visual Studio完成XAML页面的编译,在程序运行时会通过直接链接操作加载和解析XAML,将XAML和过程式代码 ...
随机推荐
- 在chatGPT的帮助下成功从Rancher中删除无效的集群
只要你坚持,不放弃,问题总有解决的一天! 与chatgpt进行了几次沟通,成功解决历史遗留问题,成功从rancher中删除了无效的集群 chatGPT回答1 如果您在 Rancher UI 中无法删除 ...
- 2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k = 2 进行轮调后,它将变成 [1,3,0,
2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k = 2 进行轮调后,它将变成 [1,3,0, ...
- 1.1. Java简介与安装
Java简介 Java是一种广泛使用的计算机编程语言,由James Gosling和他的团队在Sun Microsystems公司开发,于1995年首次发布.Java的设计理念是"一次编写, ...
- ARC143
ARC143 考试情况:一眼订正,鉴定为做出前三题. A - Three Integers 以前做过 \(n\) 个数的版本,当时还被某人嘲讽说"堆,贪心,这都做不出来?". \( ...
- 国标GB28181协议客户端开发(一)整体流程和技术选型
国标GB28181协议客户端开发(一)整体流程和技术选型 本系列文章将介绍国标GB28181协议设备端的开发过程.本文旨在探讨整体设计和技术选型方面的考虑,为开发人员提供指导和参考.文章将从设备端开发 ...
- 02. vmware搭建centos虚拟机并使用静态ip,局域网内可互通
一.虚拟机镜像地址 我这里有镜像 二.目的 使用vmware搭建centos虚拟机集群,进行基础服务搭建,对系统业务提供服务支撑 三.效果 centos虚拟机ip不会自动改变,使用设置的静态ip,可以 ...
- Solon 成为信通院可信开源社区、可信开源项目
自2021年9月17日成立以来,可信开源社区共同体共有五批新成员加入.在4月21日"OSCAR开源生态建设论坛"上,可信开源社区共同体又迎来2位正式成员和6位预备成员,Solon ...
- Cause: org.apache.ibatis.builder.BuilderException: Ambiguous collection type for property 'emps'. You must specify 'javaType' or 'resultMap'
错误原因 这个错误通常表示在解析 Mybatis 映射文件(Mapper XML)时出现了问题,可能的原因有两个: 集合属性缺少 javaType 或 resultMap 属性:该错误信息显示了 &q ...
- AI室内设计:提升效率、消除沟通障碍,满足客户需求
前言 免费AI绘图工具:https://www.topgpt.one 随着人工智能(AI)技术的不断发展,室内设计行业也开始受益于这一技术的应用.其中,AI绘画工具在室内设计中的应用正日益受到关注.这 ...
- IOS开发--UILabel的基本使用
UILabel是iOS中用于显示静态文本的控件. 它的主要功能是:1. 显示一行或多行文本 UILabel可以用来显示单行或多行文本内容.通过设置numberOfLines属性可以控制文本显示的行数. ...