Popup中ListBox的SelectChange事件关闭弹出窗体后主窗体点击无效BUG
阅读原文时间:2023年07月09日阅读:1

WPF的BUG!
弹出框的 自定义控件里有Popup, Popup里面放一个ListBox

在ListBox中的SelectionChange事件触发关闭弹出框后,主窗体存在一定概率卡死(但点击标题又能用的BUG)

步骤一: 新建个自定义WPF控件UserControl

Xaml代码:

>

逻辑代码:

public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
List> tupes = new List>();
Enumerable.Range(1, 10).Select(p => p.ToString().PadLeft(3, '0')).ToList().ForEach(p => tupes.Add(new Tuple(p, p, p)));
listboxSuggestion.ItemsSource = tupes;
listboxSuggestion.SelectionChanged += (o1, e1) =>
{
//this.IsDropDownOpen = false; //不能解决问题
RoutedEventArgs args = new RoutedEventArgs(EnterDownEvent, o1); //选中项改变触发
this.RaiseEvent(args);
};
}

    #region 回车触发事件  
    //声明和注册路由事件  
    public static readonly RoutedEvent EnterDownEvent =  
        EventManager.RegisterRoutedEvent(  
            "EnterDown",  
            RoutingStrategy.Bubble,  
            typeof(EventHandler<RoutedEventArgs>),  
            typeof(UserControl1));  
    //CLR事件包装  
    public event RoutedEventHandler EnterDown  
    {  
        add { this.AddHandler(EnterDownEvent, value); }  
        remove { this.RemoveHandler(EnterDownEvent, value); }  
    }  
    #endregion

    #region 是否打开下拉框  
    public bool IsDropDownOpen  
    {  
        get { return (bool)GetValue(IsDropDownOpenProperty); }  
        set  
        {

            SetValue(IsDropDownOpenProperty, value);

        }  
    }  
    public static readonly DependencyProperty IsDropDownOpenProperty =  
        DependencyProperty.Register("IsDropDownOpen", typeof(bool), typeof(UserControl1), new PropertyMetadata(false));  
    #endregion  
}复制

步骤二: 新建个Window窗体DialogWin

xaml代码

cs代码

public partial class DialogWin : Window
{
public DialogWin()
{
InitializeComponent();
mySelect.EnterDown += (o1, e1) =>
{
//mySelect.IsDropDownOpen = false; //不起作用
//Dispatcher.InvokeAsync(Close); //还是会卡顿
this.Close();
};
}
}

步骤三,在主窗体弹出DialogWin

xaml代码






手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章