关于Popup的小坑坑

Posted on 2020-05-17 17:25  云起  阅读(3)  评论(0编辑  收藏  举报  来源

在做一个自定义的输入搜索框,用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 =

Copyright © 2024 云起
Powered by .NET 9.0 on Kubernetes