更改内部元素的可见性后,UWP 无法打开外部 window

UWP Cannot open an external window after changing visibility of an inner element

我有一个用 C# 编写的 UWP 应用程序,我需要在其中打开第二个 window。

在这一秒内 window,有一个元素需要切换其可见性(在某些情况下)。

请在此处查找 MVCE:https://github.com/cghersi/UWPExamples/tree/master/AppWindowAndVisibility

如果您查看它,您会看到一个元素 m_searchGrid,我们可以更改它的可见性(使用方法 SwitchSearchBarVisibility()

要打开一个新的 window,我使用基元 AppWindow.TryCreateAsyncElementCompositionPreview.SetAppWindowContent

现在,以下过程在调用 ElementCompositionPreview.SetAppWindowContent 时会导致异常:

  1. 打开一个新的 window(在应用程序中,单击“打开 AppWindow”按钮)
  2. 在新打开的 window 中更改元素的可见性(在应用程序中,在新打开的 window 中,单击按钮“Show/hide 搜索栏” )
  3. 关闭第二个window
  4. 重新打开另一个 window(在应用程序中,重新单击“打开 AppWindow”按钮)

从代码的角度来看,在第 4 步,我可以看到方法 ElementCompositionPreview.SetAppWindowContent 抛出异常(参见 MainPage.xaml.cs 的第 108 行,在方法 ShowAsync() 中)。

你知道可能是什么原因吗?

也许我应该以不同的方式配置 window 或元素?

谢谢!!

UWP Cannot open an external window after changing visibility of an inner element

问题是m_wrapperCanvas被之前的m_appWindow使用了,即使你调用m_appWindow = null也没有释放。

为了解决这个问题,我们建议设置m_wrapperCanvas = null,并在ElementCompositionPreview.SetAppWindowContent

之前重新设置m_wrapperCanvas
private void AppWindow_OnClosed(AppWindow sender, AppWindowClosedEventArgs args)
{
    m_appWindow.Closed -= AppWindow_OnClosed;
    m_appWindow = null;
    m_wrapperCanvas = null;
}

..........

try
{
    Init();
    ElementCompositionPreview.SetAppWindowContent(m_appWindow, m_wrapperCanvas);
}