Доступ к ячейке в сетке WPF - PullRequest
0 голосов
/ 26 апреля 2020

У меня большая проблема, и я долго ищу, но не могу найти ответ, поэтому спрашиваю здесь и сейчас. Я знаю, как получить столбец и строку чего-то, на что я нажал, и могу установить элементы пользовательского интерфейса, но я не могу проверить, находится ли, например, игровой камень в строке 1 и столбце 1. Как получить доступ к определенной ячейке, я хочу проверить, является ли указанная ячейка c кнопкой или пустой. Спасибо всем, кто пытается ответить на этот вопрос.

Что я знаю: Как получить строки:

 Button btn = sender as Button;
                var Spalte = Grid.GetColumn(btn);
                var Zeile = Grid.GetRow(btn);

Как установить элемент:

Grid.SetColumn(Spielstein, Spalte);
Grid.SetRow(Spielstein, Zeile);

Что я не знаю: Доступ к ячейке строки 1 и столбец 1 и проверьте, если это кнопка

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Не существует прямого способа доступа к элементу по позиции столбца-строки элемента Grid, но вы можете написать вспомогательный метод, который делает это, перебирая дочерние элементы элемента Grid и получая столбец и положение строки этого элемента, как вы делали это раньше. Я пишу пример этого служебного метода с именем GetElementInGridPosition:

Код в окне:

public partial class Window1 : Window {
    public Window1() {
        InitializeComponent();
    }

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e) {
        var element = this.GetElementInGridPosition(1, 1);
        if (element is Button)
            MessageBox.Show($"The element in 1,1 is a button.");

        element = this.GetElementInGridPosition(2, 1);
        if (element is Button)
            MessageBox.Show($"The element in 2,1 is a button.");
        else
            MessageBox.Show($"The element in 2,1 isn't a button, it's a {element.GetType().Name}.");
    }

    private UIElement GetElementInGridPosition(int column, int row) {
        foreach (UIElement element in this.RootGrid.Children) {
            if (Grid.GetColumn(element) == column && Grid.GetRow(element) == row)
                return element;
        }

        return null;
    }
}

и xaml:

<Grid Name="RootGrid">
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <Button Click="ButtonBase_OnClick">Button</Button>
    <Button Grid.Row="1" Grid.Column="1">Button in column 1, row 1</Button>
    <Label Grid.Row="1" Grid.Column="2">Label in column 2, row 1</Label>
</Grid>
0 голосов
/ 26 апреля 2020

Спокойной ночи! Насколько я знаю, в wpf невозможно получить доступ к определенной ячейке c в Grid. Использование:

var Spalte = Grid.GetColumn(btn);
var Zeile = Grid.GetRow(btn);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...