2013-08-26 44 views
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方法總是傳遞父級的兩個大小。

+0

解決了這個問題,將shell.xaml中的ItemsControl改爲了ContentControl。 –

+0

把它放在答案部分。然後將其設置爲接受的答案。 – Aron

回答

1

找到了這個答案,看起來通過將shell.xaml中的ItemsControl更改爲ContentControl,高度和寬度都會傳遞給MeasureOverride()。