Wpf Grid.GetRow和Grid.GetColumn始终返回0
我有一个10x10Wpf Grid.GetRow和Grid.GetColumn始终返回0,wpf,grid,row,Wpf,Grid,Row,我有一个10x10网格。在每个空间中,我都添加了一个标签,其中添加了一个mousedoubleclick事件处理程序。因此,当我双击标签时,它应该显示行和列编号,但这两个属性都只得到0 这是代码。。。(是的,我为每个标签设置了Grid.SetRow和Grid.SetColumn) 您可能需要使用而不是e.Source。选中的事件是一个路由事件,当它在树中路由时,它将更改e.Source。您确定所有内容都已正确连接吗?以下是我的作品: XAML: 当我单击其中一个标签时,消息框包含正确的行和列。它
网格
。在每个空间中,我都添加了一个标签,其中添加了一个mousedoubleclick事件处理程序。因此,当我双击标签时,它应该显示行
和列
编号,但这两个属性都只得到0
这是代码。。。(是的,我为每个标签设置了Grid.SetRow
和Grid.SetColumn
)
您可能需要使用而不是e.Source。选中的事件是一个路由事件,当它在树中路由时,它将更改
e.Source
。您确定所有内容都已正确连接吗?以下是我的作品:
XAML:
当我单击其中一个标签时,
消息框
包含正确的行和列。它是相同的。即使是常规事件,我还是在标签上看到了。我知道这个方法的名字选择得不太好。实际上是这样的。lbl.MouseDoubleClick+=新的鼠标按钮venthandler(网格选中);lbl是标签。我在从C#非静态类以编程方式添加控件时遇到了这个问题。
private void grid_Checked(object sender, MouseButtonEventArgs e)
{
MessageBox.Show(Grid.GetRow(e.Source as UIElement).ToString());
}
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" MouseDown="Label_MouseDown">
Label 0, 0
</Label>
<Label Grid.Row="0" Grid.Column="1" MouseDown="Label_MouseDown">
Label 0, 1
</Label>
<Label Grid.Row="0" Grid.Column="2" MouseDown="Label_MouseDown">
Label 0, 2
</Label>
<Label Grid.Row="1" Grid.Column="0" MouseDown="Label_MouseDown">
Label 1, 0
</Label>
<Label Grid.Row="1" Grid.Column="1" MouseDown="Label_MouseDown">
Label 1, 1
</Label>
<Label Grid.Row="1" Grid.Column="2" MouseDown="Label_MouseDown">
Label 1, 2
</Label>
<Label Grid.Row="2" Grid.Column="0" MouseDown="Label_MouseDown">
Label 2, 0
</Label>
<Label Grid.Row="2" Grid.Column="1" MouseDown="Label_MouseDown">
Label 2, 1
</Label>
<Label Grid.Row="2" Grid.Column="2" MouseDown="Label_MouseDown">
Label 2, 2
</Label>
</Grid>
private void Label_MouseDown(object sender, MouseButtonEventArgs e)
{
var label = e.Source as UIElement;
var row = Grid.GetRow(label);
var col = Grid.GetColumn(label);
MessageBox.Show(string.Format("{0},{1}", row, col));
}