Я переписываю свой проект с модульным подходом, используя структуру prism, но у меня есть небольшая проблема, которую я не могу найти для решения.
Изначально у меня есть собственный элемент управления холстом, который я написал, чтобы позволить мне перетаскивать его дочерние элементы в нужные позиции на экране.
public class SpecialCanvas : Canvas
Холст является частью библиотеки классов под названием MainDiagram Module, и эта библиотека содержит класс, который реализует IModule.
public class MainDiagramModule : IModule
{
private readonly IRegionManager regionManager;
public MainDiagramModule(IRegionManager regionManager)
{
this.regionManager = regionManager;
}
public void Initialize()
{
ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Source = new Uri("pack://application:,,,/MainDiagramModule;Component/Resources.xaml");
Application.Current.Resources.MergedDictionaries.Add(dictionary);
regionManager.RegisterViewWithRegion("MainRegion", typeof(SpecialCanvas));
}
}
Мой класс Shell.xaml содержит ItemsControl, предоставляющий область для добавления холста.
<Window x:Class="MLinkPrismVersion.Shell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Prism="http://www.codeplex.com/prism"
Title="MachineLink" Height="700" Width="1000">
<Grid>
<ItemsControl Name="MainDiagram" Height="500" Width="800" Prism:RegionManager.RegionName="MainRegion"/>
</Grid>
My problem is that whenever MeasureOverride() is called on my SpecialCanvas class, the Size passed as a parameter gets the width from the parent, in this case 800, but the height is always infinity. Is there any way to sort this. The project was previously written in a non mvvm/prism way where I simply instantiated specialcanvas in the Mainwindow_Loaded event and added it into a grid in mainwindow.xaml, the measureoverride method was always passed both sizes of the parent.