如何在移动我的 WinRT/C++ UWP 应用程序的应用程序 window 时关闭 ComboBox 列表项?

How to close ComboBox list items when moving application window of my WinRT/C++ UWP application?

我有一对具有 IsEditable() true 和 false 的 ComboBox 控件。

当我滚动浏览我的应用程序或移动我的应用程序 window(通过单击标题栏)并打开列表弹出窗口时,我想关闭 ComboBox 列表弹出窗口,否则会出现奇怪的情况延迟正确对齐控件下方的列表。

在 WinRT/C++ 的 UWP 中这可能吗?如果是这样,请建议如何。

我进行了一项调查,以了解在移动应用程序时 ComboBox 控件基本上从初始位置移位的情况下是否有任何事件需要处理 window/scrolling 应用程序,但找不到任何帮助.

编辑:添加来自 XAML 控件库的 ComboBox 图像以演示该行为。如果 IsEditable 设置为 true,当打开弹出窗口并滚动应用程序时,弹出窗口会超出 window。相反,我想关闭弹出窗口本身。但是,如果 IsEditable 设置为 false,那么在弹出窗口关闭之前我们无法滚动。

更新:我为 PointerWheelChanged 测试的代码

void CBFile2022X::OnPointerWheelChangedHandler( Windows::Foundation::IInspectable const& sender,
                                               Windows::UI::Xaml::Input::PointerRoutedEventArgs const& eventargs )
    {
         OutputDebugString( L"PointerWheelChanged" );

         if( ComboBox != nullptr )
         {
             ComboBox.IsEnabled( false );
             ComboBox.IsEnabled( true );
         }
    }

我不得不说,目前没有事件可以检测应用程序 window 是否移动或更改了它的位置。

更新:

您可以处理 UIElement.PointerWheelChanged Event 当用户滚动鼠标滚轮时将触发的事件。可以先将ComboBox的IsEnabled 属性设为false,再设为true,这样ComboBox 失去焦点。喜欢:

   private void Mypanel_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
    {
        FontsCombo.IsEnabled = false;
        FontsCombo.IsEnabled = true;
    }

更新2:

如果您使用的是 ScrollViewer,您可以尝试处理 ScrollViewer.ViewChanging Event

  private void ScrollViewer_ViewChanging(object sender, ScrollViewerViewChangingEventArgs e)
    {
        FontsCombo.IsEnabled = false;
        FontsCombo.IsEnabled = true;
    }