2011-05-16 38 views
3

我爲DevExpress功能區編寫了一個自定義區域適配器。DevExpress爲RegionManager提供的自定義RegionAdapter問題

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我registerd區域

<dxd:DocumentGroup cal:RegionManager.RegionName="RibbonTabRegion" [...] 

在後面我可是代碼導入RegionManager.On的一個實例需求引導程序調用我的區域適配器,但有在我的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); 
+1

我有同樣的問題,不幸的是我的應用程序依賴於RequestNavigate到h有力地實施你的解決方法.. – 2011-11-16 13:00:49

回答

1

我在上面看到您找到了解決方案。但是,如果有其他問題,我發佈了一個與DevX支持解決方案鏈接相關的問題。

我有類似的問題與DevExpress DXTabControl導航(從Prism模塊),它不會顯示所需的選項卡。 DevExpress支持認識到這是一個問題。所以他們在下面的論壇帖子中給出了一個解決方案

基本上,自定義適配器中的行爲以及某些devX控件也需要被覆蓋。 (對於我的情況,這是DXTabControl。

這裏是鏈接,並按照DevX支持Alexander的最後一個鍋,下載他的示例,並在自舉程序文件中編寫了自定義適配器(可以將它放在單獨的類中它應該是,我猜他剛衝上來給一個解決方案)。

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

隨着文件組,我沒試過,但我會嘗試重建的問題,看看是否相同溶液(重寫在適配器的行爲)在那裏工作以及。

相關問題