1

私は次のコードを持っています。ウィンドウにはテキストボックスとチェックボックスがあります。チェックボックス以外のものに焦点を合わせて、123-456のようなものを入力した場合は、キャラクターごとPreviewKeyDownPreviewTextInput発砲します。

しかし、チェックボックスにフォーカスがあり、123-456と入力するとPreviewKeyDown、すべての文字に対してが起動されますがPreviewTextInput、123456に対してのみ起動され、。に対しては起動されません-。ハイフンはチェックボックスによって処理されており、に渡されていませんPreviewTextInput。ハイフンを取得する方法はありますPreviewTextInputか?

public Window1()
{
    InitializeComponent();
    TextCompositionManager.AddTextInputHandler(this, new TextCompositionEventHandler(Window_PreviewTextInput));
}

private void Window_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{

}

private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
}
4

1 に答える 1

1

私はこれを行う方法を見つけましたが、私の解決策に問題があるかどうか、またはこれを行うためのより良い方法があるかどうかを専門家から知りたいです。

ウィンドウのKeyDownイベントで、Handledをfalseにマークしています。チェックボックスは、KeyDownおよびWindowのKeyDownでHandledをtrueに設定します。これは、falseに設定しています。これにより、イベントを処理する必要があるため、PreviewTextInputが呼び出されます。

public Window1()
        {
            InitializeComponent();
            TextCompositionManager.AddPreviewTextInputStartHandler(this, new TextCompositionEventHandler(Window_PreviewTextInput));
            this.AddHandler(Window.KeyDownEvent, new System.Windows.Input.KeyEventHandler(Window_KeyDown), true);
        }

private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
        }

private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            e.Handled = false;
        }
于 2009-09-30T20:37:08.660 に答える