Как предотвратить чрезмерное вложение тегов в XAML?
Рассмотрим следующий код, в котором цвет ячейки изменяется в зависимости от чего-либо (атрибуты вырезаны для краткости):
<UserControl>
<Grid>
<ListView>
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Style>
<Style>
<Style.Triggers>
<Trigger>
<Setter>
<Setter.Value>
<LinearGradientBrush>
<GradientStop/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</UserControl>
Существуют ли какие-либо продвинутые методы в XAML, которые выходят за рамки сокращения отступов с 4 до 2 и попытки засунуть как можно больше материала в словарь ресурсов верхнего уровня (в данном случае UserControl)?
PS: я застрял с VS 2008.
1 ответ
Используйте ресурсы, чтобы упростить ваш XAML. Это также способствует лучшему повторному использованию и организации. Например, с помощью вышеупомянутого XAML вы можете разбить его на следующие части:
<UserControl>
<UserControl.Resources>
<LinearGradientBrush x:Key="MyBrush">
<GradientStop/>
</LinearGradientBrush>
<Style x:Key="ItemTextBlockStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource MyBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
<DataTemplate x:Key="ItemTemplate">
<TextBlock Style="{DynamicResource ItemTextBlockStyle}"/>
</DataTemplate>
<Style x:Key="MyListViewStyle" TargetType="{x:Type ListView}">
<Setter Property="View">
<Setter.Value>
<GridView>
<GridViewColumn CellTemplate="{DynamicResource ItemTemplate}"/>
</GridView>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<ListView Style="{DynamicResource MyListViewStyle}"/>
</Grid>
</UserControl>