WPF常用代码:Visual Logical Tree
-
自定义路由事件
// Register the routed event public static readonly RoutedEvent SelectedEvent = EventManager.RegisterRoutedEvent( "Selected", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyCustomControl)); // .NET wrapper public event RoutedEventHandler Selected { add { AddHandler(SelectedEvent, value); } remove { RemoveHandler(SelectedEvent, value); } } // Raise the routed event "selected" RaiseEvent(new RoutedEventArgs(MyCustomControl.SelectedEvent));
-
查找特定的Parent元素或Child元素
// walk up the visual tree to find object of type T, starting from initial object public static T FindUpVisualTree<T>(DependencyObject initial) where T : DependencyObject { DependencyObject current = initial; while (current != null && current.GetType() != typeof(T)) { current = VisualTreeHelper.GetParent(current); } return current as T; } public static T FindDownVisualTree<T>(Visual parent) where T : Visual { T child = default(T); int numVisuals = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < numVisuals; i++) { Visual v = (Visual)VisualTreeHelper.GetChild(parent, i); child = v as T; if (child == null) { child = FindDownVisualTree<T>(v); } if (child != null) { break; } } return child; }