いくつかのアクションを実行するためにLostFocus
イベントを処理したい。しかし、スペシャル(開く)がクリックまたはキャッチされたためにフォーカスを失ったTextBox
場合、そのアクションを実行したくありません。を押すと、まずイベントが発生します。ここで私のイベントハンドラー:TextBox
Button
OpenFileDialog
Key.Enter
Key.Enter
KeyDown
KeyDown
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
では、イベントで同じことを行うにはどうすればよいですか?
まず、クリックする前に、フォーカスを失い ました。同じ方法は認められません。、新しいイベントの作成またはイベントの処理が私の要件を満たしていません。Button
TextBox
Button.Focusable="False"
ControlTemplate
Timer.Elapsed