WPF - 网格 - 每次删除新的行/列时,更新子控件上的行和列编号附加属性

时间:2010-05-06 15:28:14

标签: wpf wpf-controls grid

我有一个类似于此的XAML的WPF网格:

  <Grid width=200 Height=200 >

        <Grid.ColumnDefinitions >                             
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="2*" />
         </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"  />
            <RowDefinition Height="Auto"  />
            <RowDefinition Height="Auto" MinHeight="24" />
        </Grid.RowDefinitions>

      <TextBlock Text="Name" Grid.Row="0" Grid.Column="0"/>
      <TextBox Grid.Row="0" Grid.Column="1" />

      <TextBlock Text="Age" Grid.Row="1" Grid.Column="0"/>
      <TextBox Grid.Row="1" Grid.Column="1" />

  </Grid>

我需要在现有的2行数据之间添加一个新行,但我担心的是,当我添加一个新行时,我需要在行中出现的每个控件中手动更新Grid.Row附加属性在新添加的行下方。

有更聪明的方法吗?可能是相对于相邻的行/列设置行/列号?

干杯。

4 个答案:

答案 0 :(得分:2)

您无法自动实现此目的。您必须根据需要为网格的每个子项手动调整Grid.Row的值:

foreach (UIElement child in grid.Children)
            if (Grid.GetRow(child) >= indexOfNewRow)
                Grid.SetRow(Grid.GetRow(child) + 1);

答案 1 :(得分:1)

Visual Studio 2010中通过设计时行和列操作功能解决了此问题。

不再需要手动更新行号和列号,因为Visual Studio会对此进行处理。

下面的演示很好地说明了这一点。

http://www.silverlight.net/learn/creating-ui/layout,-rendering,-and-panels/grid-control-design-time-row-and-column-manipulation-features

答案 2 :(得分:0)

我在Jason Rosenthal的MSDN Silverlight Forum找到了答案:

  

如果您将鼠标悬停在网格的左侧或顶部边缘,则会显示一个微小的下拉列表   将弹出选项移动到那里的箭头

答案 3 :(得分:0)

接受答案的链接现在指向Silverlight 5的常规页面。

你可以这样做是Visual Studio XAML设计师,我用下面的屏幕截图说明。这适用于WPF和Silverlight。

最好放大&#39;设计&#39;查看以便您可以更清楚地看到。

然后,将鼠标光标悬停在左侧边缘,您将获得带有水平橙色线的插入光标,指示该行将插入的位置:

XAML Design

之前的XAML:

XAML Before

插入后

XAML:

XAML After Insert

请注意,插入点之后的所有Grid.Row数字都会自动递增。插入点处的行已自动拆分为两行,并且Grid.RowSpan已添加到插入点行中的项目。

在更复杂的布局中,自动插入可能会错误地添加或更改插入点下方的项目边距,因此请仔细观察。