1

いくつかのアクションを実行するためにLostFocusイベントを処理したい。しかし、スペシャル(開く)がクリックまたはキャッチされたためにフォーカスを失ったTextBox場合、そのアクションを実行したくありません。を押すと、まずイベントが発生します。ここで私のイベントハンドラー:TextBoxButtonOpenFileDialogKey.EnterKey.EnterKeyDownKeyDown

public void TextBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e != null && sender != null)
        if (e.Key == System.Windows.Input.Key.Enter && !String.IsNullOrWhiteSpace(((TextBox)sender).Text))
        {
            e.Handled = true;
            isEnterClicked = true;
            ((System.Windows.Controls.TextBox)sender).Visibility = System.Windows.Visibility.Collapsed;
        }
}

Key.Enter が押された後、TextBox.Visibility が変更され、このオペレーターは LostFocus イベントを発生させます。

public void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
    try
    {
        if (!isEnterClicked)
        {
            DependencyObject dob = (DependencyObject)sender;
            while ( !(dob is ItemsControl))
            {
                dob = VisualTreeHelper.GetParent(dob);
            }
            dynamic myCmd = dob.GetValue(Control.DataContextProperty);
            myCmd.SomeCommand.Execute(((TextBox)sender).GetValue(Control.DataContextProperty));
        }
    }
    finally
    {
        isEnterClicked = false;
    }
}

LostFocusハンドラーは最初isEnterPressedに false に等しいかどうかを監視しますTextBox。つまり、Enter キーが押されたからではなく、フォーカスを失いました。SomeCommandにバインドされていたいくつかのアイテムを削除しTextBox、それは消えます。

Q:Button.Clickでは、イベントで同じことを行うにはどうすればよいですか?

まず、クリックする前に、フォーカスを失い ました。同じ方法は認められません。、新しいイベントの作成またはイベントの処理が私の要件を満たしていません。ButtonTextBoxButton.Focusable="False"ControlTemplateTimer.Elapsed

4

1 に答える 1

0

問題を正しく理解していれば、ボタンがフォーカスされているかどうかを確認してください。フォーカスされている場合は、テキストボックスの lostfocus イベントでアクションを実行しないでください。テキストボックスのlostfocusイベントが発生する前に、正しいボタンにフォーカスする必要があります。

if (!isEnterClicked && !button.Focused)
{
    //do stuff
}
于 2011-07-20T10:58:04.767 に答える