Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 棱镜区域不显示注册视图_Silverlight_Prism_Regions - Fatal编程技术网

Silverlight 棱镜区域不显示注册视图

Silverlight 棱镜区域不显示注册视图,silverlight,prism,regions,Silverlight,Prism,Regions,我在SilverLight 4应用程序中使用PRISM。我有一个问题,注册到某些区域的视图无法显示 在启动时加载模块时,我将一些视图注册到区域,如下所示: RegionManager.RegisterViewWithRegion("MyRegion1", typeof(IMySubView1)); RegionManager.RegisterViewWithRegion("MyRegion2", typeof(IMySubView2)); 我有一个视图实现了一个名为IMyView的接口,其中x

我在SilverLight 4应用程序中使用PRISM。我有一个问题,注册到某些区域的视图无法显示

在启动时加载模块时,我将一些视图注册到区域,如下所示:

RegionManager.RegisterViewWithRegion("MyRegion1", typeof(IMySubView1));
RegionManager.RegisterViewWithRegion("MyRegion2", typeof(IMySubView2));
我有一个视图实现了一个名为IMyView的接口,其中xaml有两个ContentControl,其区域在网格中定义如下:

<ContentControl Regions:RegionManager.RegionName="MyRegion1" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Grid.Row="0" Grid.RowSpan="1"/>
<ContentControl Regions:RegionManager.RegionName="MyRegion2" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Grid.Row="1" Grid.RowSpan="1"/>

我尝试了两种不同的方法将视图添加到主区域。两者都会添加视图和基本元素(如按钮),但视图中定义的区域不会被关联视图填充

方法1:

object obj = _container.Resolve<IMyView>();
IRegion mainRegion = _regionManager.Regions["MainViewRegion"];
IRegionManager scoped = mainRegion.Add(obj, "test", true);
mainRegion.Activate(obj);

// Enabling the following call, it will fail saying the region MyRegion1 does not exist. Feels like it should?
// IRegion myRegion = scoped.Regions["MyRegion1"];
objectobj=_container.Resolve();
IRegion mainRegion=_regionManager.Regions[“MainViewRegion”];
IRegionManager scoped=mainRegion.Add(obj,“test”,true);
主区域激活(obj);
//启用以下调用时,将失败,并说明区域MyRegion1不存在。感觉应该这样吗?
//IRegion myRegion=scoped.Regions[“MyRegion1”];
方法2:

object obj = _container.Resolve<IMyView>();
_regionManager.AddToRegion("MainViewRegion", obj);
_regionManager.Regions["MainViewRegion"].Activate(obj);
objectobj=_container.Resolve();
_regionManager.AddToRegion(“MainViewRegion”,obj);
_regionManager.Regions[“MainViewRegion”]激活(obj);
感觉xaml文件中定义的区域没有注册,因此注册的视图不会显示

MainViewRegion在TabControl的shell中定义如下:

<TabControl Margin="8,0,8,8" Regions:RegionManager.RegionName="MainViewRegion">


任何关于解决我的问题的建议都将不胜感激

我也面临同样的问题。其思想是,无论出于何种原因,已经创建的区域的视图注入{mainRegion.Add(obj,“test”,true)}都不会显示视图。一个对我有效的解决方法是从代码创建区域,然后注入视图。大概是这样的:

<ContentControl Regions:RegionManager.RegionName="MyRegion1" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Grid.Row="0" Grid.RowSpan="1"/>
<ContentControl Regions:RegionManager.RegionName="MyRegion2" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Grid.Row="1" Grid.RowSpan="1"/>
Microsoft.Practices.Composite.Presentation.RegionManager.SetRegionManager(headerRegionContainer,_RegionManager); Microsoft.Practices.Composite.Presentation.Regions.RegionManager.SetRegionName(headerRegionContainer,regionName)

变量视图=_UnityContainer.Resolve(bag.HeaderViewType); _RegionManager.Regions[regionName].Add(视图); _RegionManager.Regions[regionName]。激活(视图)

不幸的是,我不能通过这种方式实现我的目标,但也许你可以

问候,


Levente

经过几个小时的故障排除,我发现了一些东西

在Composite.Presentation\Regions\RegionManager.cs中有一个名为IsInDesignMode的方法。将要创建区域时,将调用此方法,如果此方法返回true,则不会创建区域。见下文:

private static void OnSetRegionNameCallback(DependencyObject element, DependencyPropertyChangedEventArgs args)
{
    if (!IsInDesignMode(element))
    {
        CreateRegion(element);
    }
}

private static bool IsInDesignMode(DependencyObject element)
{
    // Due to a known issue in Cider, GetIsInDesignMode attached property value is not enough to know if it's in design mode.
    return DesignerProperties.GetIsInDesignMode(element) || Application.Current == null
           || Application.Current.GetType() == typeof(Application);
}
当我们的silverlight应用程序启动并创建shell中的区域时,一切正常,application.Current属性的类型为“MyName.shell.App”。但是,当启动后添加视图时,作为对用户输入的响应,Application.Current类型突然变为“Application”类型,因此IsInDesignMode方法返回true,并且不会创建区域


如果我删除应用程序。在当前条件下,一切正常。所以问题是,我的应用程序是否有问题,或者prism源代码是否有问题?

您的区域管理器来自哪里? 你写了一个合适的引导程序吗 ? 您需要编写一个继承自MefBootTrapper或UnityBootTrapper的类(或者自定义类,如果您没有使用这两个IoC/扩展框架),以便在IoC容器中注册所有需要的类型


你能发布引导程序代码吗?

问题在Prism 4.0版中解决了,问题发生时我正在运行Prism 2.2版。

谢谢回复。不幸的是,它没有帮助,我的问题在尝试你的建议后表现完全相同。是的,我有一个合适的引导程序。请看我的下一篇文章,当我对prism源代码做了一个小修改时,一切都开始按预期工作。我正在与prism团队就我的问题进行对话,以找出根本原因。请确保发布此对话的结果,因为其他人可能会遇到相同的问题:)是的,可以:)您可以在