КОММЕНТАРИИ В XAML
Начнем с самого простого, но не менее полезного. Комментарии – помогают читать код, отключать/включать временно куски кода при отладке.
<!-- Это простой комментарий -->
Это тоже простой комментарий, но только внутри закомментирован некий код:
<!--<Image Margin="0,0,0,0" Source="Untitled-2.png" Stretch="Fill" x:Name="BackgroundPng"/>—>
Однако, учтите, что вложенные комментарии сделать не получится. Например, в данном примере внутрь тега Grid вложен комментарий, такая разметка выдаст ошибку:
<Grid>
<!-- <TextBlock Text="{Binding Path=Name}" /> -->
</Grid>
На заметку
Для того чтобы закомментировать выделенный фрагмент кода, можно нажать сочетание клавиш CTRL+K+C, а для обратного эффекта нужно нажать CTRL+K+U.
ОПРЕДЕЛЕНИЕ КОНСТАНТ В XAML
В разметку XAML можно определять константы некоторых простых типов, например, string, int, bool. Для того чтобы можно было сделать требуется добавить namespace System в документ:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Теперь в разметке можно задать константы в Resources :
<UserControl.Resources>
<sys:String x:Key="OKText">OK</sys:String>
</UserControl.Resources>
Теперь это значение можно использовать по такому же принципу как и StaticResource:
<Button Content="{StaticResource OKText}" />
На заметку
Однако, по такому принципу нельзя определить в XAML константу типа DateTime.
ПЕРЕЧИСЛЕНИЕ В XAML
Довольно часто приходится применять в XAML перечисления (enum), которые в code-behind должны выглядеть следующим образом. Есть такое перечисление:
public enum MyLovelyEnum
{
Normal, Super, Simple
}
В code-behind использование было бы таким образом:
MyLovelyEnum Lovely = MyLovelyEnum.Normal | MyLovelyEnum.Super;
Так вот, в XAML данное определение будет выглядеть так:
Lovely="Normal,Super"
DATACONTEXT VS SOURCE (DATA BINDING)
В первую очередь хотелось бы показать применение свойства Source у объекта Binding. Дело в том, что можно использовать и свойство Source и DataContext.
<TextBox DataContext="{StaticResource productResource}" Text="{Binding Name}" />
Или вот второй вариант:
<TextBox Text="{Binding Name, Source={StaticResource productResource}}" />
Эффект от применения того или иного способа будет одинаковым, за исключением некоторого нюанса. Если используется DataContext, то его “действие” распространяется на все контролы расположенные ниже по иерархии в визуальном дереве (VisualTree). Такого не происходит, если использовать Source, то есть привязка, таким образом, происходит “точечно” или “целенаправленно”. Это оправдано, когда в контексте одной формы требуется использовать несколько поставщиков данных.
ELEMENTNAME BINDING
Название параметра ElementName в классе Binding говорит само за себя. Привязка осуществляется к именованному контролу. Вот простой пример привязки:
<StackPanel>
<TextBox Name="FirstTextBox" /><TextBox Name="SecondTextBox" Text="{Binding Text, ElementName=FirstTextBox}" />
</StackPanel>
Такая привязка приведет к тому, что при изменении текста в поле TextBox с именем FirstTextBox незамедлительно изменится текст в у контрола с именем SecondTextBox. Обратного действа не произойдет, потому что по умолчанию такой важный параметр как Mode у Binding имеет значение OneWay (в одну сторону). Но если установить значение этого параметра TwoWay, то при изменении текста в любом из контролов, второй тут же получит измененное значение.
Еще одним немаловажным свойством, которое чаще всего пишется, но подразумевается по умолчанию – это свойство Path. Разметка типа:
Text="{Binding Text, ElementName=FirstTextBox}"
и
Text="{Binding Path=Text, ElementName=FirstTextBox}"
Read more: МУЗЕЙ ЮМОРА - НАЙДИ ЛУЧШЕЕ!