WPF中关闭标签的最佳实践

4

我正在阅读《Pro WPF in C# 2008》这本书,对WPF还是新手。

我基本上有一个关于最佳实践的问题,因为我想编写其他开发人员通常接受的代码。

我在整本书中看到,作者使用不同的标签关闭方式来达到不同的目的。我举个例子:

当创建网格并定义行和列时,他总是编写类似于以下代码:

<Grid.ColumnDefinitions>
  <ColumnDefinition />
  <ColumnDefinition />
</Grid.ColumnDefinitions>

因为标签没有任何内容(我不确定“inline”是否是正确的术语),所以他会在标签内部关闭“inline”标签。

但在大多数其他情况下,即使没有内容,他也会放置一个闭合标签,就像这样:

<TextBlock Text="{Binding Path=CategoryName}"></TextBlock>

我也注意到,如果他在ColumnDefinition中定义了任何属性,他也会像这样添加闭合标签。
<ColumnDefinition Width="Auto"></ColumnDefinition>

我的问题很简单。这样写有什么理由吗?我认为如果在所有情况下都没有内容,省略闭合标签看起来更整洁。

那么这只是个人偏好的问题,还是有其他原因可以在两者之间切换呢?


很难在这里选择一个答案,但似乎大家都认为这只是个人偏好。我标记了我最喜欢的那个 :) 感谢你们的努力。 - Øyvind Bråthen
4个回答

2

由于代码是相等的,所以这是个人偏好。

然而,我可以看出

<TextBlock Text="{Binding Path=CategoryName}"></TextBlock>

如果原始行是这样写的:

,那么会发生什么?

<TextBlock Text="{Binding Path=CategoryName}">
    some other xaml
</TextBlock>

但是,由于某种原因,“其他XAML”被移除了。
你应该制定一个标准并坚持它(无论你决定采取什么方式)。

1

这更多是一个XML的问题而不是WPF的问题,而且大多数情况下并不重要,因为他们只是解析XML。总的来说,我建议在没有任何子元素时始终使用“空元素”(<tag/>),因为它看起来更清洁,并防止标签内容中出现任何意外的空格。

他可能只是在书中无意中不一致。


1

当添加一个没有任何元素的控件时,最好使用自闭合标签“/>"来关闭它,而不是使用硬关闭标签。

例如:

<Label> 
    <Label.Content> 
        <TextBlock> 
            Test! 
        </TextBlock> 
    </Label.Content> 
</Label> 


<TextBlock Text={Binding Name}/>

0
在我看来,这更多是个人口味的问题。但话虽如此,有些情况下你被迫使用像<keyword></keyword>这样的符号。所以,除非被迫,否则没有理由为什么要以一种方式或另一种方式编写。我将这个问题添加到我的收藏夹中,以查看是否有任何特殊指导方针。

在哪些情况下,你被迫使用那种类型的语法? - Øyvind Bråthen
一个简单的例子是网格。网格内可以有多个控件,但是你会发现……将其写成自闭合标签是不起作用的。 - Rahul Soni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接