我有一个网格,我需要动态替换驻留在其中一个单元格中的控件。我不知道精确定位网格单元格的语法,我在哪里输入行号和列号,这样我就可以删除其中的任何内容。
问问题
5065 次
3 回答
10
如果您知道控件所在的单元格和行,则可以使用 LINQ 语句来获取它。
这是一个 LINQ 语句,它将获取第 3 列第 4 行中的第一个控件。
var control = (from d in grid.Children
where Grid.GetColumn(d as FrameworkElement) == 3
&& Grid.GetRow(d as FrameworkElement) == 4
select d).FirstOrDefault();
于 2009-04-15T02:15:15.037 回答
1
您可以使用 Grid.GetRow 和 Grid.GetColumn 方法迭代网格的子项检查其行和列值,并在值匹配时替换目标内容。这是在 WPF 中测试的示例,但应该在 Silverlight 中工作:
<Grid x:Name="SampleGrid">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Rectangle Fill="Red" Width="20" Height="20" Grid.Row="0" Grid.Column="0" />
<Rectangle Fill="Orange" Width="20" Height="20" Grid.Row="0" Grid.Column="1" />
<Rectangle Fill="Yellow" Width="20" Height="20" Grid.Row="0" Grid.Column="2" />
<Rectangle Fill="Green" Width="20" Height="20" Grid.Row="1" Grid.Column="0" />
<Rectangle Fill="Blue" Width="20" Height="20" Grid.Row="1" Grid.Column="1" />
<Rectangle Fill="Indigo" Width="20" Height="20" Grid.Row="1" Grid.Column="2" />
<Rectangle Fill="Violet" Width="20" Height="20" Grid.Row="2" Grid.Column="0" />
<Rectangle Fill="Black" Width="20" Height="20" Grid.Row="2" Grid.Column="1" />
<Rectangle Fill="Gray" Width="20" Height="20" Grid.Row="2" Grid.Column="2" />
<Button Grid.Row="3" Grid.ColumnSpan="3" Margin="10" x:Name="Swap" Click="Swap_Click" Content="Swap"/>
</Grid>
在事件处理程序中:
private void Swap_Click(object sender, RoutedEventArgs e)
{
Ellipse newEllipse = new Ellipse() { Fill = new SolidColorBrush(Colors.PaleGoldenrod), Width = 20d, Height = 20d };
for (int childIndex = 0; childIndex < this.SampleGrid.Children.Count; childIndex++)
{
UIElement child = this.SampleGrid.Children[childIndex];
if (Grid.GetColumn(child) == 2 && Grid.GetRow(child) == 2)
{
this.SampleGrid.Children.Remove(child);
Grid.SetRow(newEllipse, 2);
Grid.SetColumn(newEllipse, 2);
this.SampleGrid.Children.Add(newEllipse);
}
}
}
于 2009-04-14T12:11:59.090 回答
0
你可以记住我在网格中添加了一个私有变量的控制:
private Control controlCentral = null;
接下来,将添加到网格的控件分配给此变量,以便您可以使用 Remove 删除网格的控件。
下面的代码替换了第 0 行第 1 列的控件:
private void MostrarControlCentral(Control control)
{
if (control != null)
{
control.SetValue(Grid.RowProperty, 0);
control.SetValue(Grid.ColumnProperty, 1);
}
this.LayoutRoot.Children.Remove(this.controlCentral);
if (control != null)
{
this.LayoutRoot.Children.Add(control);
}
this.controlCentral=control;
}
于 2010-08-16T23:14:49.993 回答