WPF で子コントロールを型別に検索する
WPF コンテナー内の特定のサブコントロールを取得するには、さまざまな方法があります。この例では、「MyContainer」という名前の Grid コントロール内の ComboBox コントロールを取得します。
あなたが提供したコードthis.MyContainer.Children.GetType(ComboBox);
は間違っています。 MyContainer の子 ComboBox コントロールを取得するための正しい構文は次のとおりです:
<code class="language-csharp">var myComboboxes = this.MyContainer.Children.OfType<ComboBox>();</code>
このコードは、OfType() 拡張メソッドを使用して MyContainer の子要素をフィルタリングし、ComboBox タイプの要素のみを含めます。結果は、コンテナ内のすべての ComboBox を含む列挙になります。
また、次の拡張メソッドを使用して、指定した型の子要素を再帰的に検索することもできます:
<code class="language-csharp">public static T GetChildOfType<T>(this DependencyObject depObj) where T : DependencyObject { if (depObj == null) return null; for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) { DependencyObject child = VisualTreeHelper.GetChild(depObj, i); if (child is T result) return result; T result = GetChildOfType<T>(child); if (result != null) return result; } return null; }</code>
このメソッドを使用するには、次のように呼び出します:
<code class="language-csharp">MyContainer.GetChildOfType<ComboBox>();</code>
これにより、コンテナ内で最初に見つかった ComboBox が取得されます。すべての ComboBox を取得する必要がある場合は、前に示した OfType() メソッドを使用できます。
以上がWPF グリッド内のすべての ComboBox コントロールを効率的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。