我的XAML编码规范

简介: 去年,我们建立了自己的C#编码规范,我说服同事遵循我写的编码规范。或许我是一个偏执狂吧,如果我看到有人不遵守我写的编码规范,而是去修改它,我可能通宵都睡不着。 借助Visual Studio的优秀插件ReSharper,可以很轻松地按照规则对代码进行格式化。

去年,我们建立了自己的C#编码规范,我说服同事遵循我写的编码规范。或许我是一个偏执狂吧,如果我看到有人不遵守我写的编码规范,而是去修改它,我可能通宵都睡不着。


借助Visual Studio的优秀插件ReSharper,可以很轻松地按照规则对代码进行格式化。你只需按下Ctrl-E / Ctrl-C,就可以对代码文档进行格式化。ReSharper是Visual Studio必备的工具。(图1)



自Windows Phone平台发布的两年以来,我一直使用XAML语言设计用户界面。查看C#的编码习惯是很容易的,但是对于XAML,就很困难了。

下面是Windows存储网格应用项目的例子:

[html]   view plain copy print ?
  1. ListView.GroupStyle>  
  2.     GroupStyle>  
  3.         GroupStyle.HeaderTemplate>  
  4.             DataTemplate>  
  5.                 Grid Margin="7,7,0,0">  
  6.                     Button  
  7.                         AutomationProperties.Name="Group Title"  
  8.                         Click="Header_Click"  
  9.                         Style="{StaticResource TextPrimaryButtonStyle}">  
  10.                         StackPanel Orientation="Horizontal">  
  11.                             TextBlock Text="{Binding Title}" Margin="3,-7,10,10" Style="{StaticResource GroupHeaderTextStyle}" />  
  12.                             TextBlock Text="{StaticResource ChevronGlyph}" FontFamily="Segoe UI Symbol" Margin="0,-7,0,10" Style="{StaticResource GroupHeaderTextStyle}"/>  
  13.                         StackPanel>  
  14.                     Button>  
  15.                 Grid>  
  16.             DataTemplate>  
  17.         GroupStyle.HeaderTemplate>  
  18.     GroupStyle>  
  19. ListView.GroupStyle>  

首先,没有空行。其次,按钮的属性在不同的行。而对于TextBlock元素,属性却在同一行,且没有任何顺序。

在过了很长一段时间后,我编写了自己的XAML编码规范。其中一个原因是,我不喜欢使用"属性"窗口,因为它很难有一个全面的属性设置,而不是设置为默认。(图2)



我的编码规范可简述为以下5点:

1 元素之间放入空行。


不要担心空行太多,它会使代码更易读。

[html]   view plain copy print ?
  1. Grid Height="250"  
  2.       VerticalAlignment="Top">  
  3.   
  4.     Image Source="{Binding FeatureArticle1.Thumbnail}"  
  5.            Style="{StaticResource ImageThumbnailStyle}" />  
  6.   
  7.     StackPanel Style="{StaticResource StackPanelSummaryStyle}">  
  8.   
  9.     TextBlock FontSize="22"  
  10.                Style="{StaticResource TextBlockAuthorStyle}"  
  11.                Text="{Binding FeatureArticle1.Author}" />  
  12.   
  13.     TextBlock FontSize="26"  
  14.                Height="70"  
  15.                Style="{StaticResource TextBlockSummaryStyle}"  
  16.                Text="{Binding FeatureArticle1.Title}" />  
  17.   
  18.     StackPanel>  
  19.   
  20. Grid>  

但是只有Grid.ColumnDefinition和Grid.RowDefinitions例外,因为它们只有一行属性。

[html]   view plain copy print ?
  1. Grid.ColumnDefinitions>  
  2.     ColumnDefinition Width="200" />  
  3.     ColumnDefinition Width="200" />  
  4. Grid.ColumnDefinitions>  
  5.   
  6. Grid.RowDefinitions>  
  7.     RowDefinition Height="200" />  
  8.     RowDefinition Height="140" />  
  9. Grid.RowDefinitions>  

2 每个属性放一行。


[html]   view plain copy print ?
  1. TextBlock FontWeight="Bold"  
  2.            Foreground="White"  
  3.            HorizontalAlignment="Right"  
  4.            Margin="0,0,12,0"  
  5.            Text="{Binding ArticlesCountText}"  
  6.            TextWrapping="Wrap" />  

3 属性按字母表排序。


[html]   view plain copy print ?
  1. Image Source="/Assets/Shares/NeutralImage.png"  
  2.        Height="125"  
  3.        HorizontalAlignment="Center"  
  4.        Width="125"  
  5.        Stretch="UniformToFill"  
  6.        VerticalAlignment="Center" />  

有人说,高度Height和宽度Width应该放在一起,但作者还是喜欢按字母表顺序对属性排序。作者认为这更容易检查是否有属性设置漏了。

4 把附加属性放在起始位置并以字母表顺序放置。


[html]   view plain copy print ?
  1. Button Grid.Column="1"  
  2.         Grid.Row="2"  
  3.         Command="{Binding ShowWriterCommand}"  
  4.         CommandParameter="{Binding WriterAshley}"  
  5.         Style="{StaticResource HubTileButtonStyle}" />  

5 样式的定义可以不用那么严格。


当使用Expression Blend创建样式时,作者倾向于留下更大的空间,减少限制。这样的话,会节省很多时间。

[html]   view plain copy print ?
  1. Style x:Key="GridFeatureStyle"  
  2.         TargetType="Grid">  
  3.     Setter Property="Height"  
  4.             Value="194" />  
  5.     Setter Property="VerticalAlignment"  
  6.             Value="Top" />  
  7.     Setter Property="Width"  
  8.             Value="194" />  
  9. Style>  

结论


这可能并非完美的解决方案,但如果你遵循它的话,这是一个良好的开端,特别是在团队协作的时候。
目录
相关文章
|
5月前
|
XML 开发框架 .NET
|
C# 前端开发
WPF中Style文件的引用——使用xaml代码或者C#代码动态加载
原文:WPF中Style文件的引用——使用xaml代码或者C#代码动态加载   WPF中控件拥有很多依赖属性(Dependency Property),我们可以通过编写自定义Style文件来控制控件的外观和行为,如同CSS代码一般。
4710 0
|
消息中间件 BI C#
C#中常见的winform控件命名规范
C#中常见的winform控件命名规范
334 0
|
C#
2.XAML基础
2.XAML基础
99 0
WPF项目获取代码行数
WPF项目获取代码行数
WPF项目获取代码行数
|
JavaScript Android开发 索引
第八章:代码和XAML协调一致5
点按手势 Xamarin.Forms按钮响应手指点击,但您实际上可以从任何派生自View的类中获取手指点击,包括Label,BoxView和Frame。 这些点击事件不会内置到View类中,但View类会定义名为GestureRecognizers的属性。
1316 0
|
XML JavaScript Android开发
|
JavaScript Android开发 iOS开发
|
JavaScript API Android开发