首页 > 解决方案 > 是否有与 CSS 的网格区域等效的 XAML?

问题描述

WPF XAML 是否具有与 CSS 等效的功能grid-area?即,一种创建Row, Column, RowSpan,ColumnSpan值定义的方法,给该定义一个标识符,然后通过标识符使用这些值?

我在想像:

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="auto" />
    <RowDefinition />
    <RowDefinition Height="auto" />
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="auto" />
    <ColumnDefinition />
  </Grid.ColumnDefinitions>
  <Grid.AreaDefinitions>
    <AreaDefinition Row="0" Column="0" ColumnSpan="2" Name="Header" />
    <AreaDefinition Row="1" Column="0" Name="Navigation" />
    <AreaDefinition Row="1" Column="1" Name="Main" />
    <AreaDefinition Row="2" Column="0" ColumnSpan="2" Name="Footer" />
  </Grid.AreaDefinitions>

  <TextBlock Grid.Area="Header" Text="Header" />
  <TextBlock Grid.Area="Navigation" Text="Navigation" />
  <TextBlock Grid.Area="Main" Text="Main" />
  <TextBlock Grid.Area="Footer" Text="Footer" />
</grid>

标签: wpfxaml

解决方案


没有完全类似的东西,但有一个可以类似使用的功能。样式是“将一组属性值应用于多个元素的便捷方式”。无论您有许多元素都需要将相同的属性设置为相同的值,您都可以定义 a Style,如下所示:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.Resources>
        <Style x:Key="AStyle" TargetType="TextBlock">
            <Setter Property="Grid.Row" Value="1"/>
            <Setter Property="Grid.Column" Value="1"/>
        </Style>
    </Grid.Resources>

    <TextBlock Style="{StaticResource AStyle}" Text="Header" />
</Grid>

在您的示例代码中,这将毫无用处,因为没有一个TextBlocks 共享一组完整的值 - 您不会保存任何冗余代码,因为它只使用一次。但是 a grid-area,如果它存在,出于同样的原因,它同样无用。


推荐阅读