我正在做一种WPF的设计师。我想要找出我点击从网格控制中删除它的ColumnDefinition。我会照顾那些“在那个ColumnDefinition里”的孩子。是否可以从单击事件处理程序的sender参数中获取?现在我正在检查e.GetPosition是否在ColumnDefinition.ActualWidth的范围内,但我想知道是否有更好的解决方案。
发布于 2011-11-29 18:05:55
在单击事件处理程序中:
int columnIndex = Grid.GetColumn((UIElement)sender);其中,发送者是直接网格的子级。
发布于 2011-11-29 17:48:02
不管怎样,为什么你需要捕获ColumnDefinition上的点击?是虚拟的,它没有任何实际的正文,它只是对Grid的一个提示,告诉你如何布局它的内容。因此,您必须在content对象上设置处理程序,而不是在ColumnDefinition上。
关于WPF Grid如何工作的一些说明。当您将一些控件添加到网格中时,它们都将成为其子控件。
<Grid>
<Button/>
<TextBox/>
<Label/>
</Grid>它们都将显示出来,而与您如何配置Column或RowDefinitions无关。Column和RowDefinitions只告诉网格您希望如何标记其中的所有现有元素,但它们不是容器,它们不包含元素。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Button/><!-- this is identical to Grid.Column="0"-->
<TextBox Grid.Column="1"/>
<Label Grid.Column="2"/>
</Grid>在本例中,我们创建了三个ColumnDefinitions,即使从网格XAML中也可以看到,控件不在定义中。它们就像标尺参考线一样用来对齐内容。然后,在元素上设置附加属性,以告知网格您要将元素放置在何处。当网格开始布局时,它将看到有三个元素和三个ColumnDefinitions,并将尝试按照ColumnDefinitions所说的定位元素。但是如果你在运行时移除或更改ColumnDefinitions,网格将会以一种新的方式重新排列控件。如果你想隐藏一些元素,你必须隐藏它们,而不是ColumnDefinition。
https://stackoverflow.com/questions/8308278
复制相似问题