C# 在模块内使用自定义控件的复合wpf(Prism)

C# 在模块内使用自定义控件的复合wpf(Prism),c#,.net,wpf,mvvm,prism,C#,.net,Wpf,Mvvm,Prism,我正在使用prism框架用模块化方法重写我的项目,但有一个小问题我找不到解决方案 最初,我有一个自定义画布控件,我编写该控件是为了允许我将其子元素拖动到屏幕上所需的位置 public class SpecialCanvas : Canvas 画布是名为MainDiagram Module的类库的一部分,该库包含一个实现IModule的类 public class MainDiagramModule : IModule { private readonly IRegion

我正在使用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));
    }
}
My 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>

我的问题是,每当对SpecialCanvas类调用MeasureOverride()时,作为参数传递的大小都会从父级获取宽度,在本例中为800,但高度总是无穷大。 有什么办法可以分类吗。
该项目以前是以非mvvm/prism的方式编写的,我只是在Mainwindow_Loaded事件中实例化了specialcanvas,并将其添加到Mainwindow.xaml中的网格中,measureoverride方法始终传递给父级的两个大小。

找到了这个问题的答案,似乎通过将shell.xaml中的ItemsControl更改为ContentControl,高度和宽度都会传递给MeasureOverride()。

解决了这个问题,将shell.xaml中的ItemsControl更改为ContentControl。将其放在答案部分。然后将其设置为已接受的答案。