プリズム フレームワークを使用したモジュラー アプローチでプロジェクトを書き直していますが、解決策が見つからない小さな問題があります。
最初に、子要素を画面上の目的の位置にドラッグできるように作成したカスタム キャンバス コントロールがあります。
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>
私の問題は、SpecialCanvas クラスで MeasureOverride() が呼び出されるたびに、パラメーターとして渡された Size が親から幅 (この場合は 800) を取得しますが、高さは常に無限大です。これを並べ替える方法はありますか。このプロジェクトは以前、Mainwindow_Loaded イベントで specialcanvas をインスタンス化し、それを mainwindow.xaml のグリッドに追加するだけで、mvvm/prism 以外の方法で作成されていました。measureoverride メソッドには、常に親の両方のサイズが渡されました。