Как сделать WPF Adorner видимым
Я немного борюсь за то, когда или как активировать / сделать видимым MoveAdorner.
Я пытаюсь сделать следующее, но безуспешно: в элемент, который нужно украсить, я добавляю Adorner в событие GotFocus. Одного этого недостаточно, поэтому я добавил вызов InvalidateVisual(). Но ничего не происходит. Кто-нибудь намекнул, как сделать эти украшения видимыми?
protected void MyUIElement_GotFocus( object sender, RoutedEventArgs e )
{
AdornerLayer layer = AdornerLayer.GetAdornerLayer( this );
layer.Add( new MoveAdorner( this ) );
layer.InvalidateVisual( );
}
Для уточнения: украшенный элемент является элементом управления, который расположен внутри производной панели пользовательского ItemsControl.
MoveAdorner
происходит от Adorner
и просто рисует две коробки в верхней и нижней строке элемента управления.
С наилучшими пожеланиями
1 ответ
На самом деле события Got/Lost Focus не очень хороши для этой ситуации. Представьте, что вы хотите показать дополнительные элементы управления вводом, которые могут сфокусироваться.
Теперь я подключился к LeftButtonUpEvent и скрыл все остальные элементы оформления и отображал только элемент оформления текущего элемента.
Кроме того, рекламодатель добавляется по запросу по запросу. Этот метод определен в элементе управления, который должен быть "украшен".
private void ShowAdorner( ) {
Owner.HideAppointmentAdorners( );
AdornerLayer layer = AdornerLayer.GetAdornerLayer( this );
Adorner []adorners = layer.GetAdorners( this );
if( adorners == null || adorners.Length == 0 )
{
layer.Add( new ResizingAdorner( this ) { Visibility = System.Windows.Visibility.Visible } );
}
else
{
for( int i = 0; i < adorners.Length; i++ )
{
adorners [ i ].Visibility = System.Windows.Visibility.Visible;
}
}
}