我为DevExpress功能区编写了一个自定义区域适配器。
public class dxDocumentGroupRegionAdapter : RegionAdapterBase<DocumentGroup>
{
private DocumentGroup _instance;
public dxDocumentGroupRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory)
: base(regionBehaviorFactory)
{ }
protected override IRegion CreateRegion()
{
return new AllActiveRegion();
}
protected override void Adapt(IRegion region, DocumentGroup regionTarget)
{
_instance = regionTarget;
regionTarget.Items.Clear();
region.ActiveViews.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler((x, y)
=>
{
switch (y.Action)
{
case NotifyCollectionChangedAction.Add:
foreach (object __panel in y.NewItems)
{
if (__panel is DocumentPanel)
_instance.Items.Add(__panel as DocumentPanel);
else
{
if (__panel is UIElement)
{
DocumentPanel panel = new DocumentPanel();
panel.Content = __panel;
_instance.Items.Add(panel);
}
}
}
break;
case NotifyCollectionChangedAction.Remove:
foreach (DocumentPanel __panel in y.NewItems)
{
_instance.Items.Remove(__panel);
}
break;
}
});
region.ActiveViews.ToList().ForEach( x => regionTarget.Items.Add(x as DocumentPanel));
}
在我的shell的xaml中,我注册了一个区域
<dxd:DocumentGroup cal:RegionManager.RegionName="RibbonTabRegion" [...]
在后面的代码中我导入了RegionManager的实例。要求引导程序调用我的区域适配器,但是我的RegionManager中没有该区域的条目。 我也试过
RegionManager.SetRegionManager(this, rManager)
但没有成功。 奇怪的是
rManager.RegisterViewWithRegion("regionName", typeof(view))
适合我,但rManager.RequestNavigate没有。
有什么想法吗?
修改
我找到了解决这个问题的方法。 我必须手动注册我的区域:
IRegionAdapter regionAdapter = new Prism.dxDocumentGroupRegionAdapter(this.Container.GetExportedValue<IRegionBehaviorFactory>());
IRegion region = regionAdapter.Initialize(this.documentContainer, Types.ConstantValues.MainRibbonTabRegionName);
this.tRegionManager.Regions.Add(region);
答案 0 :(得分:1)
我在上面看到你找到了解决方案。但是,如果有其他问题,我发布了一个相关的问题,我和DevX支持解决方案链接。
我与DevExpress DXTabControl有类似的问题,在导航时(从Prism模块),它不会显示所需的选项卡。 DevExpress支持认识到这是一个问题。所以他们在以下论坛帖子中给出了解决方案。
基本上,对于某些devX控件,还需要覆盖自定义适配器中的行为。 (就我而言,它是DXTabControl。
这是链接,并按照DevX支持Alexander的最后一个底池,下载他的示例并将自定义适配器编码在bootstrapper文件中,(你可以将它放在一个单独的类中,它应该是,我猜他只是赶紧给出解决方案)。
http://www.devexpress.com/Support/Center/p/Q360416.aspx
对于文档组,我还没有尝试,但我会尝试重新创建您的问题,看看是否同样的解决方案(通过覆盖适配器中的行为)也适用于那里。