gpt4 book ai didi

c# - 在模块中使用自定义控件的复合 wpf(Prism)

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:45 26 4
gpt4 key购买 nike

我正在使用 Prism 框架以模块化方法重写我的项目,但有一个小问题我找不到解决方案。

最初我有一个自定义的 Canvas 控件,我编写它允许我将其子元素拖动到屏幕上的所需位置。

    public class SpecialCanvas : Canvas

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 以提供要添加到的 Canvas 区域。

<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,但高度始终为无穷大。有什么办法可以解决这个问题。该项目以前是以非 mvvm/prism 方式编写的,我只是在 Mainwindow_Loaded 事件中实例化了 specialcanvas 并将其添加到 mainwindow.xaml 中的网格中,measureoverride 方法始终传递父级的两种尺寸。

最佳答案

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

关于c# - 在模块中使用自定义控件的复合 wpf(Prism),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18450012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com