繁体   English   中英

TextBox LostFocus不会触发

[英]TextBox LostFocus does not fire

我有一个LostFocus事件的问题,当我单击背景时它不会触发。我读了一些有关焦点逻辑和键盘焦点的内容,但是当只有一个控件时,例如文本框,我找不到从控件中获取焦点的方法他们之中

XAML:

<Grid Height="500" Width="500">
    <TextBox Height="23" Width="120" Margin="12,12,0,0" Name="textBox1" LostFocus="textBox1_LostFocus"  />
</Grid>

C#:

    private void textBox1_LostFocus(object sender, RoutedEventArgs e)
    {

    }

您必须使用以下隧道事件:文本框上的PreviewLostKeyboardFocus

隧道传输:最初,将调用元素树根目录处的事件处理程序。 然后,路由事件沿着路径沿连续的子元素行进,到达作为路由事件源的节点元素(引发路由事件的元素)。 隧道路由事件通常作为控件的合成的一部分来使用或处理,从而可以有意抑制来自复合零件的事件,或者用整个控件特有的事件来代替。 WPF中提供的输入事件通常实现为隧道/冒泡对。 隧道事件有时也称为“预览”事件,因为该对使用了命名约定。

以下行为将解决此问题:

public class TextBoxUpdateOnLostKeyboardFocusBehavior : Behavior<TextBox>
{
    protected override void OnAttached()
    {
        if (AssociatedObject != null)
        {
            base.OnAttached();
            AssociatedObject.LostKeyboardFocus += OnKeyboardLostFocus;
        }
    }

    protected override void OnDetaching()
    {
        if (AssociatedObject != null)
        {
            AssociatedObject.LostKeyboardFocus -= OnKeyboardLostFocus;
            base.OnDetaching();
        }
    }

    private void OnKeyboardLostFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        var textBox = sender as TextBox;

        if (textBox != null && e.NewFocus == null)
        {
            // Focus on the closest focusable ancestor
            FrameworkElement parent = (FrameworkElement) textBox.Parent;
            while (parent is IInputElement && !((IInputElement) parent).Focusable)
            {
                parent = (FrameworkElement) parent.Parent;
            }

            DependencyObject scope = FocusManager.GetFocusScope(textBox);
            FocusManager.SetFocusedElement(scope, parent);
        }
    }
}

您可以将其附加到TextBox,如下所示:

 <TextBox>
    <i:Interaction.Behaviors>
        <behaviors1:TextBoxUpdateOnLostKeyboardFocusBehavior />
    </i:Interaction.Behaviors>              
</TextBox>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM