or

public class RadPaneGroupRegionAdapter : RegionAdapterBase<RadPaneGroup> { public RadPaneGroupRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory) : base(regionBehaviorFactory) { } protected override void AttachBehaviors(IRegion region, RadPaneGroup regionTarget) { base.AttachBehaviors(region, regionTarget); } protected override void Adapt(IRegion region, RadPaneGroup regionTarget) { region.Views.CollectionChanged += (s, e) => { switch (e.Action) { case NotifyCollectionChangedAction.Add: foreach (var item in e.NewItems.OfType<RadPane>()) { regionTarget.Items.Add(item); } break; case NotifyCollectionChangedAction.Remove: foreach (var item in e.OldItems.OfType<RadPane>()) { //regionTarget.Items.Remove(item); item.RemoveFromParent(); } break; case NotifyCollectionChangedAction.Replace: var oldItems = e.OldItems.OfType<RadPane>(); var newItems = e.NewItems.OfType<RadPane>(); var newItemsEnumerator = newItems.GetEnumerator(); foreach (var oldItem in oldItems) { var parent = oldItem.Parent as ItemsControl; if (parent != null && parent.Items.Contains(oldItem)) { parent.Items[parent.Items.IndexOf(oldItem)] = newItemsEnumerator.Current; if (!newItemsEnumerator.MoveNext()) { break; } } else { oldItem.RemoveFromParent(); regionTarget.Items.Add(newItemsEnumerator.Current); } } break; case NotifyCollectionChangedAction.Reset: regionTarget .EnumeratePanes() .ToList() .ForEach(p => p.RemoveFromParent()); foreach (var view in region.Views) { regionTarget.Items.Add(view); } break; default: break; } }; foreach (var view in region.Views.OfType<RadPane>()) { regionTarget.Items.Add(view); } } protected override IRegion CreateRegion() { return new AllActiveRegion(); } }
public class DockingExtensions { public static bool GetRemovePanesWhenClosed(DependencyObject obj) { return (bool)obj.GetValue(RemovePanesWhenClosedProperty); } public static void SetRemovePanesWhenClosed(DependencyObject obj, bool value) { obj.SetValue(RemovePanesWhenClosedProperty, value); } public static readonly DependencyProperty RemovePanesWhenClosedProperty = DependencyProperty.RegisterAttached("RemovePanesWhenClosed", typeof(bool), typeof(DockingExtensions), new PropertyMetadata(false, OnRemovePanesWhenClosedPropertyChanged)); private static void OnRemovePanesWhenClosedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var newValue = (bool)e.NewValue; var dock = d as RadDocking; if (dock != null) { if (newValue) { dock.PreviewClose += dock_PreviewClose; } else { dock.PreviewClose -= dock_PreviewClose; } } } private static void dock_PreviewClose(object sender, Telerik.Windows.Controls.Docking.StateChangeEventArgs e) { foreach (var pane in e.Panes) { DependencyObject o = pane.Parent; pane.RemoveFromParent(); pane.Content = null; pane.Header = null; pane.DataContext = null; } e.Handled = true; } }
Namespace OrdinaSoft.Windows.Controls;Interface Uses System.Windows, Telerik.Windows.Controls, Telerik.Windows.Controls.GridView, Telerik.Windows.Data; Type FilteringControl Nested In osRadGridViewTextColumn = Private Sealed Class ( Telerik.Windows.Controls.GridView.FilteringControl ) Public Constructor; Method Prepare (Column : GridViewColumn); Override; End;Implementation Constructor osRadGridViewTextColumn.FilteringControl; Begin Style := System.Windows.Style (Application.Current.Resources ['FilteringControlStyle']) End; Method osRadGridViewTextColumn.FilteringControl.Prepare ( Column : GridViewColumn ); Begin Inherited Prepare (Column); End;End.