首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义RegionManager用于DevExpress的问题

自定义RegionManager用于DevExpress的问题
EN

Stack Overflow用户
提问于 2011-05-16 13:05:40
回答 1查看 2K关注 0票数 3

我为DevExpress丝带编写了一个自定义区域适配器。

代码语言:javascript
复制
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中,我注册了一个区域

代码语言:javascript
复制
<dxd:DocumentGroup cal:RegionManager.RegionName="RibbonTabRegion" [...]

在后面的代码中,我正在导入一个RegionManager.On需求实例,引导程序正在调用我的区域适配器,但是在我的RegionManager中没有该区域的条目。我也试过

代码语言:javascript
复制
RegionManager.SetRegionManager(this, rManager)

但没有成功。奇怪的是

代码语言:javascript
复制
rManager.RegisterViewWithRegion("regionName", typeof(view))

为我工作,但rManager.RequestNavigate没有。

有什么想法吗?

编辑

我找到了解决这个问题的方法。我必须手动注册我的区域:

代码语言:javascript
复制
 IRegionAdapter regionAdapter = new Prism.dxDocumentGroupRegionAdapter(this.Container.GetExportedValue<IRegionBehaviorFactory>());
 IRegion region = regionAdapter.Initialize(this.documentContainer, Types.ConstantValues.MainRibbonTabRegionName);
 this.tRegionManager.Regions.Add(region);
EN

回答 1

Stack Overflow用户

发布于 2013-02-18 16:52:40

我看到上面你找到了解决办法。然而,对于额外的问题,如果有,我将发布一个相关的问题,我和DevX支持解决方案链接。

我与DevExpress DXTabControl有类似的问题,在导航(从棱镜模块)时,它将不会显示所需的选项卡。DevExpress支持意识到这是一个问题。所以他们在下面的论坛上给出了一个解决方案。

基本上,对于某些devX控件,自定义适配器中的行为也需要重写。(就我的情况而言,是DXTabControl。

下面是链接,然后按照DevX support Alexander的最后一种方法下载他的示例,他在引导程序文件中编写了自定义适配器(您可以将它放在一个单独的类中,我猜他只是急忙给出了一个解决方案)。

http://www.devexpress.com/Support/Center/p/Q360416.aspx

对于document,我没有尝试过,但是我将尝试重新创建您的问题,并查看相同的解决方案(通过覆盖适配器中的行为)是否也在那里工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6017868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档