When View (UserControl) cannot be access from Presenter and burried inside inside a shared DLL, you may use Shell Window to walk up/down tree. But some docking situation requires using DockLayoutManager to track down. var shellWindow = _mySvc.GetApplicationShell() as XpfRibbonShellView; if (shellWindow == null) return; shellWindow.Dispatcher.Invoke(new Action(() => { try { // when TheView is docked var wrkSpace = VisualTreeHelpers.FindChild<ContentControl>(shellWindow, "wrkSpace"); var gContent = VisualTreeHelpers.FindChild<GroupPaneContentPresenter>(wrkSpace, "PART_Content"); var lpItemsCtl = VisualTreeHelpers.FindChild<LayoutItemsControl>(gContent); foreach (var i in lpItemsCtl.Items) { // TheView docked top layer var lp = i as LayoutPanel; if (lp != null && lp.Content is TheView) lp.ShowCaption = true; // TheView Tabbed inside another docked var lg = i as LayoutGroup; if (lg == null) continue; foreach (var i2 in lg.Items) { var tg = i2 as TabbedGroup; if (tg != null) { var layoutItems = tg.GetItems(); foreach (var lp2 in layoutItems.Cast<LayoutPanel>().Where(lp2 => lp2.Content is TheView)) { lp2.ShowCaption = true; } } // TheView could end up here if close and then added back whiel in Tab mode var lp3 = i2 as LayoutPanel; if (lp3 != null && lp3.Content is TheView) lp3.ShowCaption = true; } } // When TheView is floating foreach (var lp in shellWindow.DockLayoutManager.FloatGroups.SelectMany(fg => fg.Items.OfType<LayoutPanel>().Where(lp => lp.Content is TheView))) { lp.ShowCaption = true; } // All auto hide layout panel need to be handled here , not just TheView. foreach (var lp in shellWindow.DockLayoutManager.AutoHideGroups.SelectMany(ahGroup => ahGroup.Items).OfType<LayoutPanel>()) { lp.ShowCaption = true; } } catch (Exception ex) { _log.Error(ex); } }));
Blog Archive
Tuesday, September 23, 2014
Using DevExpress Layout Manager access a View from Shell
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment