XAML Island中FlyoutFrame鼠标悬停时UIA树无法刷新的问题求助
XAML Island中FlyoutFrame鼠标悬停时UIA树无法刷新的问题求助
各位大佬好,我目前在开发一个Win32 C++应用,里面集成了XAML Island。界面里有个按钮,鼠标悬停时会弹出一个FlyoutFrame。我的实现逻辑大概是这样的:第一次加载FlyoutFrame时,创建一个新的FlyoutFrame实例;当FlyoutFrame失去焦点需要隐藏时,我会设置flyout.Content(nullptr),再把flyout.Visible(false)。
问题来了:第一次弹出Flyout的时候,UIA(UI自动化)树显示完全正常,但之后再操作,UIA树就不会刷新了,直接显示顶层窗口是空的。
下面是我的示例代码:
void ShowFlyout() { if(flyout) { flyout = CreateFlyout(); flyout.Content(frame); } else { EnableWindow(reinterpret_cast<HWND>(flyout.WindowId()), false); flyout.Content(frame); flyout.Visible(true); } } void HideFlyout() { EnableWindow(reinterpret_cast<HWND>(flyout.WindowId()), false); flyout.Content(nullptr); flyout.Visible(false); }
我试过每次显示Flyout都调用CreateFlyout(),这样UIA树确实能每次正常刷新,但这种做法引入了其他无关的bug,所以不能这么用。另外我还尝试过在AutomationPeer上触发StructureChanged事件,没有任何效果;也试过清空frame的Grid子元素,而不是设置flyout.Content(nullptr),同样解决不了问题。
现在我就想实现UIA树的稳定刷新和内容展示,能试的方法都试过了,有没有大佬能给点思路?
内容来源于stack exchange
相关产品推荐
相关产品推荐

