0

考虑以下代码,其中单元格的颜色根据任何内容而变化(为简洁起见,属性被剥离):

<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。

4

1 回答 1

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>
于 2013-05-28T20:11:08.270 回答