を私は解決策を見つけたかもしれないと思います。コンボボックスにはDropDownClosedイベントがあります。問題はRoutedEventではないため、コンボボックスのスタイルを作成してEventSetterを介してすべてのイベントを継承することはできません。
を(あなたがエラー'DropDownClosed' must be a RoutedEvent registered with a name that ends with the keyword "Event"
を取得する)しかし、Loaded
イベントはするRoutedEventあるので、我々はスタイルでそれをフックすることができます:今、私たちは常に前に発火するイベントを持っていることを
<Style x:Key="ComboBoxCellStyle" TargetType="ComboBox">
<EventSetter Event="Loaded" Handler="ComboBox_Loaded" />
</Style>
、私は最終的に火災がドロップダウンが閉じていることをイベントへのアクセス権を持っていることを今
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
((ComboBox)sender).DropDownClosed -= ComboBox_OnDropDownClosed;
((ComboBox)sender).DropDownClosed += new System.EventHandler(ComboBox_OnDropDownClosed);
}
:コンボボックスで行われている何かは、私たちが実際に気にイベントにフックすることができます私は、煩わしいComboBoxでフォーカスが終了していることを確認するために必要なアクションを実行できます。私の場合は、以下:
void ComboBox_OnDropDownClosed(object sender, System.EventArgs e)
{
FrameworkElement visualElement = (FrameworkElement)sender;
while(visualElement != null && !(visualElement is DataCell))
visualElement = (FrameworkElement)visualElement.TemplatedParent;
if(visualElement is DataCell)
{
DataCell dataCell = (DataCell)visualElement;
dataCell.EndEdit();
if(!(dataCell.ParentRow is InsertionRow)) dataCell.ParentRow.EndEdit();
}
}
私は、GridViewコントロールでDataCellのテンプレートとしてコンボボックスを持っていて、ユーザーはコンボボックスは、その後の外でクリックされたオープンなポップさと、この特定の問題は、編集を終了からのDataRowを防止しました。グリッド。
これは、このバグで私の最大の問題でした。このイベントでフォーカスを設定する二次的な問題iffユーザーがクリックしました。ユーザーがタブを押すかエスケープするので、コンボボックスも閉じられている可能性があるので、マウスの位置にフォーカスを合わせるだけでは問題ありません。 DropDownClosedイベントの原因を突き止めるための詳細情報が必要です。おそらく、_Loadedイベントハンドラのルーティングされていないイベントにフックすることを意味します。
こんにちは@Alain、ここでの問題は、あなたが標準的なコントロールの通常の動作から逸脱しようとしていることです。たとえあなたが説明する方法を行う方が良いと思っても、人々の使い方と矛盾しますほとんどの場合、悪い考えです。 – joshuahealy
ここでの本当の問題は、ユーザーが「コンボボックスのリストを表示した後にUIが応答する前に、2回クリックする必要がある」という苦情があることです。私はちょうどユーザーに戻って、それが仕様であると言えば、彼らは別のデザイナーを見つけるでしょう。 – Alain
だから私はほとんどの場合、私たちはすべての顧客に対処しなければならなかったと言っています...うまくいけば、WPFの達人が助けてくれることを願っています。 – joshuahealy