我正在制作WPF Designer。我想找出ColumnDefinition
我点击了从网格控件中删除它。我会照顾那些“在ColumnDefinition中”的孩子。
我可以从点击事件处理程序的sender
参数中获取它吗?
现在我正在检查e.GetPosition
是否在ColumnDefinition.ActualWidth
的范围内,但我想知道是否有更美丽的解决方案。
答案 0 :(得分:1)
在点击事件处理程序中:
int columnIndex = Grid.GetColumn((UIElement)sender);
发件人,如果是直接网格的孩子。
答案 1 :(得分:0)
为什么你还需要捕获ColumnDefinition上的一个点击?是虚拟的,它没有任何实际的主体,它只是Grid的一个提示,你想如何布局它的内容。 因此,您必须在内容对象上设置处理程序,而不是在ColumnDefinition上设置处理程序。
有关WPF Grid如何工作的一些说明。 当你向网格添加一些控件时,它们都会变成它的子节点。
<Grid>
<Button/>
<TextBox/>
<Label/>
</Grid>
并且它们都将显示不是关于如何配置Column或RowDefinitions。 Column和RowDefinitions只告诉Grid你想如何对其中的所有现有元素进行aling,但它们不是容器,它们不包含元素。
<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。