Как предотвратить чрезмерное вложение тегов в 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>
Другие вопросы по тегам