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