#endregion } } 如何使用: 在窗体或控件的Loaded方法中,添加如下代码: UIElement uiElement = (UIElement)this.Content; AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(uiElement); adornerLayer.Add(new WatermarkAdorner(uiElement RoutedEventArgs e) { UIElement uiElement = (UIElement)this.Content; AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(uiElement); adornerLayer.Add(new WatermarkAdorner
:装饰器 /// DragControlsBase:装饰器实现类 /// Dictionary<UIElement, Tuple<AdornerLayer , DragControlsBase>> DictionaryDataList = new Dictionary<UIElement, Tuple<AdornerLayer, DragControlsBase adornerLayer = AdornerLayer.GetAdornerLayer(Controls); adornerLayer.Add(dragControlsBase ); Tuple<AdornerLayer, DragControlsBase> tuple = new Tuple<AdornerLayer, DragControlsBase >(adornerLayer, dragControlsBase); DictionaryDataList.Add(Controls, tuple);
Point(-10000, -10000); this.indexToSelect = -1; } } 在PreviewMouseMove事件中根据需要拖拽操作的元素创建一个AdornerLayer 其实拖拽移动的只是这个AdornerLayer,真实的元素并未移动。 this.GetSelectorItem(this.selector.SelectedIndex); if (itemToDrag == null) return; AdornerLayer adornerLayer = this.ShowDragAdornerResolved ? ); } DragEnter,DragLeave,DragEnter事件中处理AdornerLayer的位置以及是否显示。
:装饰器 /// DragControlsBase:装饰器实现类 /// Dictionary<UIElement, Tuple<AdornerLayer , DragControlsBase>> DictionaryDataList = new Dictionary<UIElement, Tuple<AdornerLayer, DragControlsBase adornerLayer = AdornerLayer.GetAdornerLayer(Controls); adornerLayer.Add(dragControlsBase ); Tuple<AdornerLayer, DragControlsBase> tuple = new Tuple<AdornerLayer, DragControlsBase >(adornerLayer, dragControlsBase); DictionaryDataList.Add(Controls, tuple);
我创建了一个内部类 ConnectedAnimationAdorner 用于在 AdornerLayer 上承载连接动画。 AdornerLayer 是 WPF 中的概念,用于在其他控件上叠加显示一些 UI,UWP 中没有这样的特性。 Content is UIElement root) { var layer = AdornerLayer.GetAdornerLayer(root); Content is UIElement root) { var layer = AdornerLayer.GetAdornerLayer Content is UIElement root) { var layer = AdornerLayer.GetAdornerLayer
AdornerDecorator 为可视化树中的子元素提供 AdornerLayer,如果没有它的话一些装饰效果不能显示(例如下图Button控件的Focus效果),Window的 ContentPresenter