在我的 UWP 应用程序 ComboBox 中,当 IsEditable 为 False 时,我们在单击控件后立即触发 PointerExited 事件

In my UWP application ComboBox, PointerExited event fired right after we click on the control when IsEditable is False

好像有类似的问题但是没有解决

我在我的 WinRT/C++ 应用程序中使用组合框,需要将鼠标悬停在它上面时将光标显示为手形。问题是当点击它时,光标变成箭头,因为 PointerExited 被触发。我添加了代码以在“PointerEntered”时将光标更改为 Hand,在“PointerExited”时更改为箭头。

仅当 IsEditable 设置为 False 时才会出现此问题。当 bool 标志为 True 时,它​​按预期工作。

我想解决这个不必要的 PointerExited 触发问题,即,只要我在组合框区域,我就想显示“手”。

组合框由两个主要部分组成。一个是显示所选项目的 ContentPresenter,另一个是显示项目的 PopUp。您正在处理的 PointerEntered 事件属于 ContentPresenter 部分。当您单击组合框并且 PopUp 覆盖在 ContentPresenter 部分时,PointerExited 将被触发,因为光标正在进入 PopUp。目前,没有办法避免这种行为。

对此没有完美的解决方案。解决方法是您可以处理 PopUpScrollViewerPointerEntered 事件。在该事件中将光标类型更改为手,就像您在 PointerEntered 事件和 Combobox.

的 **PointerExited ** 事件中所做的一样

请检查以下步骤:

  1. 从 generic.xaml 文件获取 ComboBox 控件的默认样式,并将该样式应用到您的 ComboBox 控件。
  2. 在添加的样式中找到ScrollViewer控件,并为PointerEntered事件和PointerExited事件添加事件处理程序。
  3. 更改处理程序中的游标类型。

这是基本步骤,您可能需要检查其他逻辑,例如所选项目的更改,以确保在这种情况下光标的类型正确。