[ad_1]
戦艦ゲームを作成していますが、ボタンである船を 10 x 10 のボタンで満たされたグリッドに配置するのに問題があります。 最初のクリックイベントで、選択しているスタックパネルのボタンをクリックします。 2 番目では、最初のクリックと同じように船を選択した後、グリッドをクリックしてボタン (船) を配置します。 最初のクリック イベントはスタックパネルに接続され、2 番目のクリック イベントはグリッドに接続されます。 スタック パネルのボタンをクリックした後、グリッドのスポットをクリックし、スタック パネルでクリックしたボタンをグリッドのスポットに割り当てます。 これは、スタック パネルのボタンをクリックしてボタンのグリッドに配置するためのコードです。
private void Button_Click(object sender, RoutedEventArgs e) { foreach (var button in myStack.Children) { if (button is Button) { (button as Button).Background = Brushes.Green; } } (sender as Button).Background = Brushes.Red; }
これは、スタック パネルのボタンをクリックして 10X10 グリッドに配置した後、自分のグリッドをクリックする関数です。 ありがとう!
private void ButtonMe_Click(object sender, RoutedEventArgs e) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if(sender is Button) { } } } ((Button)sender).Background = Brushes.Red; }
私が試したこと:
スタックパネルの最初のボタンクリックを、私が書いたものでグリッドに配置する2番目のボタンに接続しようとしましたが、うまくいきませんでした。
解決策 1
あなたが WPF にどれほど慣れているかはわかりませんが、問題に対する別の解決策は Canvas を作成することです。 コードでは、ヒット テストを実行し、ヒットの位置、いわばどのグリッドで円を描画するか、ヒットかノーかを示すために 1 つまたは何かに色を付けることができます。
ここから始めるのがよいかもしれません。
キャンバス クラス[^]
ビジュアル層でのヒット テスト[^]
wpf のビジュアル レイヤーでヒット テストを改善します。[^]
[ad_2]
コメント