2
我正在使用棱鏡框架以模塊化方法重寫我的項目,但有一個小問題,我無法找到解決方案。在模塊中使用自定義控件的複合wpf(棱鏡)
最初我有一個自定義畫布控件,我寫了這個控件讓我將其子元素拖動到屏幕上的所需位置。
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>
我的問題是,每當的MeasureOverride()調用我的SpecialCanvas類,作爲參數傳遞的尺寸從父獲取寬度,在這種情況下800,但高度始終是無窮大。 有什麼方法可以對此進行排序。 該項目以前以非mvvm/prism方式編寫,其中我簡單地在Mainwindow_Loaded事件中實例化了specialcanvas,並將其添加到mainwindow.xaml中的網格中,measureoverride方法總是傳遞父級的兩個大小。
解決了這個問題,將shell.xaml中的ItemsControl改爲了ContentControl。 –
把它放在答案部分。然後將其設置爲接受的答案。 – Aron