关于Popup的小坑坑

在实现自定义搜索框时遇到Popup控件的弹出问题,当TextBox激活且无文本输入时,Popup无法正常显示。原因是Popup的StaysOpen为false时,在失去鼠标焦点时会自动关闭。解决方法包括:1)通过鼠标事件动态调整StaysOpen属性;2)延迟Popup的弹出,避免其立即关闭。
摘要由CSDN通过智能技术生成

在做一个自定义的输入搜索框,用textbox+popup来实现。其中有一个小需求,当textbox激活并且没有文本输入的时候,也要显示popup。很自然的想到了使用IsKeyboardFocusedChanged事件

        private void input_IsKeyboardFocusedChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            if (e.NewValue.Equals(true))
            {
                if (input.Text.Length == 0)
                    pop.IsOpen = true;
            }
        }

但是运行的时候发现,popup控件不能正常弹出,被这个问题缠住了好久。于是监控了popup的Closed事件,发现popup弹出后立即被关闭了。

查看了相关内容,发现popup控件有一个内部行为

        private static void OnLostMouseCapture(object sender, MouseEventArgs e)
        {
            Popup popup = sender as Popup;
            if (!popup.StaysOpen)
            {
                PopupRoot root = popup._popupRoot.Value;
                bool reestablishCapture = e.OriginalSource != root && Mouse.Captured =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值