3

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));
    }

シェルの 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);
4

1 に答える 1

1

私はあなたが解決策を見つけたのを上で見ます。ただし、追加の問題については、私が持っていた関連する問題を投稿していて、DevXがソリューションリンクをサポートしている場合。

DevExpress DXTabControlでも同様の問題が発生し、(Prismモジュールから)ナビゲートすると目的のタブが表示されません。DevExpressサポートは、これが問題であることを認識しました。そこで、彼らは次のフォーラム投稿で解決策を示しました。

基本的に、カスタムアダプターの動作も、特定のdevXコントロールに対してオーバーライドする必要があります。(私の場合はDXTabControlでした。

ここにリンクがあり、DevXサポートAlexanderによる最後のポットをたどり、彼のサンプルをダウンロードして、彼はブートストラッパーファイル内にカスタムアダプターをコーディングしました(別のクラスに入れることができます、私は彼が急いで与えたと思います解決策)。

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

ドキュメントグループについては試していませんが、問題を再現して、同じ解決策(アダプターの動作をオーバーライドすることによる)がそこでも機能するかどうかを確認します。

于 2013-02-18T16:52:40.687 に答える