gpt4 book ai didi

c# - WPF 组合框 : click outside of popup suppress mouse click

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:13 25 4
gpt4 key购买 nike

我使用标准的 WPF ComboBox 控件。当弹出窗口打开并且用户单击外部某处时,弹出窗口将关闭。但是如果窗口上有按钮并且用户单击它(弹出窗口仍然打开),则不会执行按钮的单击处理程序。弹出窗口已关闭,但用户必须再点击一次按钮才能引发点击事件。

我知道这是该控件的标准行为。你有什么想法如何绕过这种行为吗?谢谢!

最佳答案

我用@Eng 修复了一些错误。 M·哈姆迪 very good approach并在 C# 中完成,还将其应用于应用程序范围内的所有组合框。

应用 Hook :

EventManager.RegisterClassHandler(typeof(ComboBox), UIElement.PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(FixComboBoxOutClick));

处理程序代码:

    private void FixComboBoxOutClick(object sender, MouseButtonEventArgs e) {
if (sender is ComboBox combo) {
Point comboRelativePoint = Mouse.GetPosition(combo);
if (comboRelativePoint.X < 0 || comboRelativePoint.Y < 0 || comboRelativePoint.X > combo.ActualWidth || comboRelativePoint.Y > combo.ActualHeight) {
UIElement popupContent = combo.FindChild<Popup>(null).Child;
Point popupRelativePoint = Mouse.GetPosition(popupContent);
if (popupRelativePoint.X < 0 || popupRelativePoint.Y < 0 || popupRelativePoint.X > popupContent.RenderSize.Width || popupRelativePoint.Y > popupContent.RenderSize.Height) {
combo.IsDropDownOpen = false;
}
}
}
}

可以找FindChild<T>()实现 here .

关于c# - WPF 组合框 : click outside of popup suppress mouse click,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37891680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com