Как сделать 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;
      }
  }

}

Другие вопросы по тегам