1. ホーム
  2. wpf

[解決済み] グリッドの行と列の位置をプログラムで設定する方法

2023-01-11 01:25:12

質問

スタックパネル内に2つのグリッドがあります。 最初のグリッドはGridXと名付けました。 最初は、グリッドの中に、テキストボックス(RowDefs/ColumnDefs)の2D配列があります。 XAMLでのテキストボックスの定義は次のとおりです。

<TextBox x:Name="A1" Grid.Row="4" Grid.Column="5" TextAlignment="Center" />

を追加したい。 テキストブロック をGridXの一部と同じ位置にプログラム的に追加したい。

このような効果が必要です。

<TextBlock Grid.Row="4" Grid.Column="5"
HorizontalAlignment="Left" VerticalAlignment="Top" Text="10" FontSize="8"/>

これをどのように追加するか。 私はこれを試しました。

TextBlock tblock = new TextBlock();
GridX.SetColumn(tblock, cIndex);
GridX.SetRow(tblock, rIndex);

しかし、失敗しました。

もう一度、これを試してみました。

int rIndex = Grid.GetRow(txtBox);
int cIndex = Grid.GetColumn(txtBox);                               

TextBlock tblock = new TextBlock();
tblock.VerticalAlignment = VerticalAlignment.Top;
tblock.HorizontalAlignment = HorizontalAlignment.Left;
tblock.FontSize = 8;
tblock.Text = rc[i, j - 1];

Grid.SetColumn(tblock, cIndex);
Grid.SetRow(tblock, rIndex);

txtBox.MaxLength = 1;    

さて、問題はTextBlockが表示されていないことです。TextBoxはそれを隠します。 私はあなたの助けに感謝します。

どのように解決するのですか?

アタッチされたプロパティについては、値を割り当てたいオブジェクトのSetValueを呼び出すことができます。

tblock.SetValue(Grid.RowProperty, 4);

または、オーナー型のプロパティの静的なSetメソッド(試したようなインスタンスメソッドとしてではなく)、この場合はSetRowを呼び出します。

Grid.SetRow(tblock, 4);