Grid.GetRow и Grid.GetColumn продолжают возвращать 0 - PullRequest
2 голосов
/ 18 февраля 2010

у меня 10х10 Grid.И в каждом месте я добавил метку, к которой я добавил обработчик события mousedoubleclick.Поэтому, когда я дважды щелкаю метку, она должна показывать числа Row и Column, но я получаю только 0 для обоих свойств.

Это код ... (и да, я установил Grid.SetRow и Grid.SetColumn для каждой метки)

private void grid_Checked(object sender, MouseButtonEventArgs e)
{
    MessageBox.Show(Grid.GetRow(e.Source as UIElement).ToString());
}

Ответы [ 2 ]

3 голосов
/ 19 февраля 2010

Вы уверены, что все правильно подключено? У меня работает следующее:

XAML:

<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>

C #:

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));
}

В MessageBox содержатся правильные строка и столбец, когда я нажимаю на одну из меток.

1 голос
/ 18 февраля 2010

Возможно, вам придется использовать e.OriginalSource вместо e.Source. Проверенное событие, будучи перенаправленным, изменится e.Source при маршрутизации по дереву.

...