如何保持WPF用户控件的加载和使用HwndSource(有问题的异常:Visual Target的根Visual无法具有父级)

问题描述 投票:0回答:1

我创建了UserControl并将其显示在外部窗口中。这意味着我创建了插件,并将其用于宿主应用程序(不是我创建的),该宿主应用程序将WPF UserControl显示为GUI。

一切正常,我可以重新打开窗口,它是确定,但

问题

当窗口由主机应用程序重新创建时。这意味着,双击窗口时,主机应用程序会更改window(<我得到这个例外:

System.ArgumentException:Visual Target的根Visual无法具有父级

...

在App.Xaml.csline 78中的mf_GetViewIP(IntPtr&view)处

这是我如何显示WPF USerControl的代码

private void mf_GetViewIP(ref IntPtr view) { try { if (m_main_view == null) { m_main_view = new Views.uc_main_view(); m_main_view.VerticalAlignment = VerticalAlignment.Stretch; m_main_view.HorizontalAlignment = HorizontalAlignment.Stretch; } sourceParam = new HwndSourceParameters("Arpegissimo ML"); sourceParam.PositionX = 0; sourceParam.PositionY = 0; sourceParam.ParentWindow = view; sourceParam.WindowStyle = WS_VISIBLE | WS_CHILD; source = new HwndSource(sourceParam); source.RootVisual = m_main_view; // csline 78 (exception) } catch (Exception e) { MessageBox.Show(e.ToString()); } if (mfp_wai_set != null) { mfp_wai_set(); } }

例外消失

if (m_main_view == null)删除并且m_main_view一直为new这就是我要避免的。
问题

如何保留m_main_view(每次new都不要使用)而没有得到此异常?可能吗?我只想避免每次加载时都需要重新显示GUI时准备视图。

我创建了UserControl并将其显示在外部窗口中。这意味着我创建了插件,并将其用于宿主应用程序(不是我创建的),该宿主应用程序将WPF UserControl显示为GUI。一切都是...

c# wpf interop
1个回答
0
投票
我找到解决方法
© www.soinside.com 2019 - 2024. All rights reserved.