XAML格式化工具:XAML Styler

来源:https://www.cnblogs.com/czwy/archive/2023/08/08/17615490.html
-Advertisement-
Play Games

# UnityStats 屬性詳解 UnityStats 是 Unity 引擎提供的一個用於監測游戲性能的工具,它提供了一系列的屬性值,可以幫助開發者解游戲的運行情況,從而進行優化。本文將詳細介紹 UnityStats 的每個屬性值,並提供多個使用例子幫助開發者更好地使用 UnityStats。 # ...


XAML格式化的意義

在開發WPF應用過程中,編寫XAML時需要手動去縮進或者換行,隨著時間的推移或者參與開發的人增多,XAML文件內容的格式會越來越亂。要麼屬性全都寫在一行,內容太寬一屏無法完整展現;要麼屬性單獨占一行,難以直觀的看清結構;另外xaml元素的屬性無序,重要屬性查找困難,手動維護屬性使之規律有序也比較費時。

格式化XAML代碼可以使代碼佈局整齊,減少冗餘空格和換行符,使代碼結構清晰、縮進一致。使代碼更易於閱讀和理解,開發人員能夠更快速地編寫和修改代碼。此外,還可以確保整個項目中的代碼風格一致,對於團隊協作和代碼維護非常重要。然而微軟官方並未提供很好的XAML格式化方案,不過Visual Studio Marketplace中有個非常好用的插件XAML Styler

安裝配置XAML Styler

在Visual Studio的擴展管理視窗中,搜索XAML Styler下載安裝後重啟Visual Studio即可完成安裝。在"工具"->"選項"中找到"XAML Styler"可以進行詳細配置。每一項具體含義參見配置項說明
image
如果需要在XAML編輯器執行保存時自動格式化,需要把Format XAML on save設置為true。如果想手動格式化,則直接在XAML編輯器中右鍵菜單點擊Format XAML或者使用快捷鍵進行格式化。
image

統一格式化標準

在團隊開發中,即便所有的人都使用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查看每項配置對應代碼格式化後的效果。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # 一、前言 [從零玩轉系列之微信支付實戰PC端支付微信取消介面搭建 | 技術創作特訓營第一期 ](​https://cloud.tencent.com/developer/article/2308342) halo各位大佬很久沒更新了最近在搞微信支付,因商戶號審核了我半個月和小程式認證也找了資料並 ...
  • ## Spring ​ 涉及的設計模式:單例模式,簡單工廠模式,代理模式,觀察者模式,反射,註解。。。。。 ### Spring配置文件文件頭 ```xml ``` ### IOC 控制反轉 將創建對象的權力由開發者交 給 Spring(緩解對象和對象之間的耦合度) ​ 在傳統模式下,對象的創建和賦 ...
  • QT性能優化之QT6框架高性能模型視圖代理框架千萬級數據表分頁查詢優化 簡介 本文介紹了QT模型視圖代理框架中的QT表格控制項和QT資料庫模塊中的QT資料庫查詢模型結合使用的一個應用實踐案例:QT高性能表格控制項分頁展示千萬行數據。本文介紹了這個應用實踐案例的運行效果和源代碼。這個應用實踐案例實測運行表 ...
  • ## 教程簡介 PDFBox是一個開源Java庫,支持PDF文檔的開發和轉換.使用此庫,您可以開發用於創建,轉換和操作PDF文檔的Java程式.除此之外,PDFBox還包括一個命令行實用程式,用於使用可用的PDF對PDF執行各種操作Jar文件. [PDFBox入門教程](https://www.it ...
  • 本文從源碼層面介紹了Spring如何創建bean、如何解決迴圈依賴,同時也介紹了不能解決哪些迴圈依賴,同時在文章的最後解決迴圈依賴報錯的幾個方法 ...
  • 作者:樹洞君 \ 鏈接:https://juejin.cn/post/7064376361334358046 # 事故描述 從6點32分開始少量用戶訪問app時會出現首頁訪問異常,到7點20分首頁服務大規模不可用,7點36分問題解決。 # 整體經過 6:58 發現報警,同時發現群里反饋首頁出現網路繁 ...
  • ## 一. 時間複雜度 - 時間複雜度簡單的說就是一個程式運行所消耗的時間,叫做時間複雜度,我們無法目測一個程式具體的時間複雜度,但是我們可以估計大概的時間複雜度。 - 一段好的代碼的就根據演算法的時間複雜度,即使在大量數據下也能保持高效的運行速率,這也是我們學習演算法的必要性。 ### 1.1 大O表 ...
  • ### 寫在前面 也許現在的你需要用PB完成畢業設計、需要維護遠古時代的代碼,又或者是你呆的公司就是要求要用PB開發項目。 不管你是出於什麼原因還在使用PB,不可否認PB在數據視窗非常優秀,熟練使用之後開發資料庫相關的應用非常高效 但由於PB這一框架出現得比較早,而且主要用於傳統基於資料庫得CS開發 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...