Лучшая практика для закрытия тегов в WPF - PullRequest
4 голосов
/ 19 ноября 2010

Я сейчас читаю книгу Pro WPF на C # 2008 , и я новичок в WPF.

У меня, в основном, есть вопросы относительно наилучшей практики, так как я хочу написать код, который обычно принимается другими разработчиками.

Я вижу по всей книге, что автор использует разные способы закрытия тегов для разных целей. Я приведу пример:

При создании сетки и определении строк и столбцов он всегда пишет этот код, подобный следующему:

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

Таким образом, он закрывает тег «inline» внутри тега, так как тег не имеет никакого содержимого (я не уверен, является ли inline правильной формулировкой для этого)

Но в большинстве других мест он будет ставить закрывающий тег, даже если в нем нет такого контента

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

Я также вижу, что если он определит какие-либо атрибуты в случае ColumnDefinition, он также добавит закрывающий тег, подобный этому

<ColumnDefinition Width="Auto"></ColumnDefinition>

Мой вопрос прост. Есть ли причина писать это так? Я думаю, что было бы более аккуратно опустить закрывающий тег, если во всех случаях нет содержимого.

Значит, это просто вопрос личных предпочтений или есть какие-то другие причины для переключения между ними.

Ответы [ 4 ]

2 голосов
/ 19 ноября 2010

Это личное предпочтение, так как код эквивалентен.

Однако я вижу, что

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

произойдет, если строка будет изначально написана как:

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

но затем «другой xaml» удаляется (по любой причине)

Что вам нужно сделать, так это придумать стандарт и придерживаться его (каким бы способом вы ни решили).

1 голос
/ 19 ноября 2010

При добавлении элемента управления, в котором нет элементов, лучше закрыть его самозакрывающимся тегом «/>» вместо жесткого закрывающего тега.

например.

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


<TextBlock Text={Binding Name}/>
1 голос
/ 19 ноября 2010

Это скорее XML, чем WPF, и в большинстве случаев это не имеет значения, поскольку они просто анализируют XML. В целом, хотя я бы рекомендовал всегда использовать «Пустые элементы» (), когда у вас нет дочерних элементов, так как они оба выглядят чище и предотвращают случайные пробелы в содержимом тега.

Возможно, он просто непоследователен в книге случайно

0 голосов
/ 19 ноября 2010

На мой взгляд, это скорее личный вкус. Но, несмотря на это, есть некоторые сценарии, когда вы вынуждены использовать нотацию, например <keyword></keyword>. Таким образом, если нет необходимости, нет причин, по которым вы должны писать так или иначе. Я добавляю этот вопрос в свой список любимых, чтобы посмотреть, есть ли какие-то особые указания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...