WPF的BUG!
弹出框的 自定义控件里有Popup, Popup里面放一个ListBox
在ListBox中的SelectionChange事件触发关闭弹出框后,主窗体存在一定概率卡死(但点击标题又能用的BUG)
步骤一: 新建个自定义WPF控件UserControl
Xaml代码:
逻辑代码:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
List
Enumerable.Range(1, 10).Select(p => p.ToString().PadLeft(3, '0')).ToList().ForEach(p => tupes.Add(new Tuple
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代码
手机扫一扫
移动阅读更方便
你可能感兴趣的文章