【问题标题】:Load Module Default Views In Region to Create Menu在区域中加载模块默认视图以创建菜单
【发布时间】:2023-04-01 05:44:01
【问题描述】:

我正在构建一个在运行时动态加载模块的 M-V-VM 应用程序。

这些模块中的每一个都有一个默认视图,当我去时它们会单独显示在所选区域上

_regionManager.Regions["BottomMenuRegion"].Add(
    Container.Resolve<AdminModuleView>(), "AdminView", true);

但是,当下一个模块加载时,它会覆盖之前加载的视图。如何将多个视图加载到一个区域中,以便创建一个显示默认视图的“菜单”?例如

<ItemsControl cal:RegionManger.RegionName="BottomMenuRegion" />

看起来像

Module1View Module2View Module3View Module4View 等

提前谢谢你。

【问题讨论】:

    标签: wpf views prism region


    【解决方案1】:

    我设法通过创建 StackPanelRegion 适配器并使用以下 XAML 来做到这一点

     <StackPanel  Orientation="Horizontal"
                cal:RegionManager.RegionName="BottomMenuRegion" >
    
                <ItemsControl>
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <Grid/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                </ItemsControl>
            </StackPanel >
    

    区域适配器代码在这里为那些在相同情况下

     public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel>
        {
            public StackPanelRegionAdapter(IRegionBehaviorFactory behaviorFactory) :
                base(behaviorFactory)
            {
            }
            protected override void Adapt(Microsoft.Practices.Composite.Regions.IRegion region, StackPanel regionTarget)
            {
                region.Views.CollectionChanged += (s, e) =>
                {
                    if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
                        foreach (FrameworkElement element in e.NewItems)
                            regionTarget.Children.Add(element);
                    //Handle remove event as well.. 
                };
            }
    
            protected override Microsoft.Practices.Composite.Regions.IRegion CreateRegion()
            {
                return new AllActiveRegion();
            }
        }
    

    【讨论】:

      【解决方案2】:

      如果我的理解正确,您正在尝试加载到一个区域,但是当您将对象加载到该区域时,它们会相互覆盖?

      您不能将多个视图加载到一个区域中。如果您想显示将显示其他视图的菜单,则必须创建两个区域并制作自己的菜单。将菜单显示代码放入 ModuleInit 中,然后将一些代码添加到菜单项的单击事件中,这会将其他视图加载到不同的“MainRegion”中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-23
        • 2021-04-10
        • 1970-01-01
        • 2013-03-19
        • 2022-06-22
        相关资源
        最近更新 更多