1

5列と10行のグリッドがあり、各列の値は、クリックしたセルの値を取得するために必要な任意の数値をクリックすると0〜9になるはずです。これを構築するための最良の方法は何ですか?

ここに画像の説明を入力してください

4

1 に答える 1

1

これを行うには多くの方法があり、要件について詳しく知らなければ、どれが最適かを判断するのは困難です。

1つの方法は、マウスクリックリスナーをグリッドに接続し、ハンドラーで、クリックされたセルを計算することです。

Grid grid = e.Source as Grid;
Point clickedPoint = e.GetPosition(Grid.RowProperty);
int rowClicked = (int)Math.Floor(clickedPoint.Y / grid.RowDefinitions.Count);

これは、イベントリスナーが1つしかないため、パフォーマンスに優れています。ただし、グリッドの上に配置する要素がクリックイベントのバブルを許可することを確認する必要があります(つまり、クリックリスナーを実装する場合は、使用e.Handled = false)。


別の方法として、グリッドセルにUI要素がある場合は、グリッド内の各要素にクリックリスナーをアタッチし、を使用clickedElement.GetValue(Grid.RowProperty)して行番号を取得します。


編集次のようなコードビハインドを使用して、単純な5x10グリッドを作成できます。

        const int columns=5, rows=10;
        for (int i = 0; i < columns; i++)
        {
            grid.ColumnDefinitions.Add(new ColumnDefinition());
            for (int j = 0; j < rows; j++)
            {
                if (i==0) grid.RowDefinitions.Add(new RowDefinition());
                var content = new TextBlock() { Text = j.ToString() };
                Grid.SetColumn(content, i);
                Grid.SetRow(content, j);
                grid.Children.Add(content);
            }
        }
于 2012-09-14T16:36:05.380 に答える