У меня есть приложение с двумя элементами управления Canvas.Когда приложение запускается, оно загружает из DLL UserControl, который в основном представляет собой Canvas с кучей кода XAML.
Я хочу иметь возможность отображать этот элемент управления на двух холстах, однако, когда я использую ContentPresenter и связываю его в обоих холстах с элементом управления, загруженным из DLL, он отображается только на одном холсте и на другомэто не так.Я предполагаю, что это связано с тем фактом, что я на самом деле использую один и тот же ресурс в двух разных холстах, но так как я хотел избежать использования слишком большого количества памяти (элемент управления, загруженный из DLL, довольнотяжелый) Я не хотел создавать две копии одного и того же элемента управления.
Есть ли у кого-нибудь лучший подход / решение для этой ситуации?
Это XAML для отображения загруженного элемента управления водин из двух холстов (другой холст использует похожий код)
<Canvas Width="{Binding MapModel.MapControl.Bounds.Width}" Height="{Binding MapModel.MapControl.Bounds.Height}">
<Canvas.Background>
<VisualBrush>
<VisualBrush.Visual>
<ContentPresenter Content="{Binding MapModel.MapControl}" />
</VisualBrush.Visual>
</VisualBrush>
</Canvas.Background>
</Canvas>
А загрузка из DLL выполняется:
// Load the map library assembly (Using reflection)
Assembly asm = Assembly.LoadFile(m_fileName);
Type[] tlist = asm.GetTypes();
// Find the class that represents the airport XAML drawing in the assembly, if it finds the airport class then
// set the value to be an instance of that class.
foreach (Type t in tlist)
{
if (t.Name == "Map")
{
MapControl = Activator.CreateInstance(t) as UserControl;
break;
}
}
Заранее спасибо!