のイベントを処理して、いくつかのアクションを実行するTextBox
とします。しかし、もしもが特別なButton
(これはOpenFileDialog
を開く)がクリックされたか、またはKey.Enter
がキャッチされたので、それがフォーカスを失った場合、そのアクションを実行したくないでしょう。 Key.Enter
が押されたとき、最初にKeyDown
イベントが発生します。ここKeyDown
の私のイベントハンドラ:Key.Enterが押された後LostFocusの処理の問題
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;
}
}
、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
は入るが押されたので、それはない注力失いました。 SomeCommand
はTextBox
にバインドされたアイテムを削除し、消えます。
Q:だから、Button.Click
と同じようにするには?
まず、bfeoreButton
click、TextBox
フォーカスを失った。同じ方法では受け入れられません。 Button.Focusable="False"
、新しいControlTemplate
を作成したり、Timer.Elapsed
イベントを処理しても私の要件を満たしていません。
動作しません。 'LostFocus'は' Button.IsFocused'が 'true'に設定されるより早く発生します。 – stukselbax
私はwinformsに縛られていて、私はwpfでそれが違うと思うと思った:/ – Reniuz
とにかく、あなたの提案に感謝! – stukselbax