2

選択が変更された後にwpfコンボボックスのテキストが変更されないようにする方法はありますか? コンボボックスから派生したカスタム コントロールがあり、選択が変更された後にテキストを手動で設定できるようにしたいのですが、さらに base.OnSelectionChanged が呼び出されるのを防ぐことはできません (これはトリックを行いますが、の一部としてそこにとどまる必要があります)。要件)

4

2 に答える 2

0

同様の問題を解決する必要がありました。これが私がそれをした方法です:

  • 私の最初の ComboBox アイテムは、NotifiyPropertyChanged を実装するオブジェクトです。その値はいつでも変更でき、更新されます。
  • IsEnabled を False に設定して、ユーザーが選択できないようにしました。

このアイテムを無効にしても他のアイテムと同じように表示する場合は、ItemTemplate を設計します。

  • SelectionChanged ハンドラーでは、選択されたインデックスが 0 の場合、何もしません。
  • selectedIndex が最初のものでない場合は、このインデックスを使用して計算を行い (最初の項目のテキストの更新を含む)、SelectedIndex0 に設定します。

編集 2: グリッドの IsHitTestVisible を False に設定し、CheckBox を True に設定してみてください。

編集 1: 最初の解決策が機能しない場合: したがって、重要な問題は、CheckBox ではなく行をクリックすると、SelectionChange がトリガーされることです。あなたがしなければならないことは、トンネリングの左クリック イベントを処理することです: PreviewMouseLeftButtonDown にハンドラーを (コードよりも単純な xaml で) 追加し、ハンドラーで MouseButtonEventArgs の OriginalSource を取得します。最初に、オリジナル ソースまたはそのビジュアル親の 1 つが 2 番目の CheckBoxItem であるかどうかをチェックして、CheckBox の 2 番目の選択肢 (index:1) にいることを確認します。そうでない場合は、戻ります。OriginalSource が CheckBox であるか、CheckBox の視覚的な親である場合は、何もしません。それ以外の場合は、イベントを処理済みとしてマークします。

NB : VisualTreeHelper.GetParent を使用して、Dependency オブジェクトまたはその親の 1 つが特定の型であるかどうかをチェックするサブを作成する必要があります。(最上位の親は Window であり、Nothing/Null を親として持ちます。) このサブルーチンは、見つかった場合は正しい型のオブジェクトを返し、見つからなかった場合は Noting/Null を返します。

于 2012-07-11T10:58:01.530 に答える