Я создал UserControl и отображаю его во внешнем окне. Это означает, что я создал плагин, и он используется в хост-приложении (не созданном мной), который отображает этот WPF UserControl как GUI.
Все работает, я могу открыть окно и оно ok , за исключением
Проблема
, когда окно воссоздается приложением хоста. Это означает, что при двойном щелчке по окну хост-приложение меняет окно (быстро воссоздано ) и добавляет собственную (хост-приложение) панель внутри окна. Затем Я получаю это исключение:
System.ArgumentException: root Visual of Visual Target не может иметь родителя
...
в mf_GetViewIP (IntPtr & view) в App.Xaml.csline 78
Вот код, как я отображаю 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 отображается во второй раз.