【问题标题】:Composite wpf(Prism) using custom controls within modules使用模块内的自定义控件复合 wpf(Prism)
【发布时间】:2013-08-29 06:57:49
【问题描述】:

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

我的 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,但高度始终为无穷大。 有没有办法对此进行排序。 该项目之前是用非 mvvm/prism 方式编写的,我只是在 Mainwindow_Loaded 事件中实例化了 specialcanvas 并将其添加到 mainwindow.xaml 中的网格中,measureoverride 方法总是传递父级的两个大小。

【问题讨论】:

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

标签: c# .net wpf mvvm prism


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-11
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多