0

私は、いくつかのグループボックスを持つ WPF アプリケーションを使用しており、それぞれに 3 ~ 4 個のコントロールが含まれています。これらのグループボックスにはそれぞれリセット ボタンがあります。

グループボックスのリセットボタンをリセットする必要がある各アイテムの行を明示的に書き込む代わりに、リセットボタンが含まれているグループボックスのすべてのアイテムのみをリセットする方法はありますか?

この問題を調査しているときに、関連していると思われる次の投稿を見つけましたが、これを行うためにネイサンの回答を拡張する方法がわかりません:フォーム C# のすべてのコントロールをクリアする最良の方法は何ですか?

4

2 に答える 2

1

各コントロールに TAG を追加して、コントロールで編集されているプロパティを示し、リセットを押したときに、ボタンを上に移動して含まれる GroupBox を見つけ、次に下に移動してこの GroupBox に含まれるすべてのコントロールを見つけます。タグ、リセットが必要なプロパティの名前。次に、Reflexion を使用してプロパティをリセットします。
おそらく問題は、デフォルト値が明らかでない可能性があることです。ただし、すべてのバインディングのデフォルト値を静的オブジェクトに保存し、このリセット オブジェクトのプロパティの値を現在のステータス オブジェクトにコピーすることができます。Rq : reflexion を使用して、現在の GroupBox のすべてのコントロールのバインディングを取得し、バインディングからバインドされたプロパティを取得することもできるため、TAG は必要ありません。しかし、コントロールに複数のバインドがある場合、どれをリセットすればよいかわかりません。私の場合、GroupBoxes 内のコントロールには、デフォルト値 (緑) かデフォルト以外 (赤) かを示すカラー バインディングもあるため、TAG が必要です。(しかし、カラーインジケータは読み取り専用であるため、実際には、リフレクションをもう少し使用してリフレクションを使用することもできます...私がそれを見たときに動作ロジックを変更するには怠惰すぎました:-) )
私はあなたのバインディングについて知らないので、明らかに何が最善かはわかりません。これが役立つことを願っています。

于 2012-08-06T09:43:25.873 に答える
1

この質問は、必要なメソッドのソースとして使用できます。

まず、ボタンを含むグループボックスを見つける必要があります。これを行うには、sender引数フォームのクリックイベントを使用します。これは、クリックされたボタンへの参照でありFindVisualParent、その質問の回答の1つからメソッドを呼び出します。これにより、グループボックスが提供されます。

次に、すべての ui 要素をFindVisualChildren<DependencyObject>メソッドで検索します。これにより、クリアされるコントロールのスーパーセットが提供されます。

次に、あなたが参照した問題のように、これをループするだけです。その質問は wpf ではなく winforms を対象としているため、controldefaultsグループ化コントロール ~( ) を処理する辞書を修正する必要があることに注意してくださいPanel GroupBox。これはここでは必要ありません (wpf では機能しません)。

于 2012-08-06T08:32:51.023 に答える