Как сделать WPF Adorner видимым - PullRequest
1 голос
/ 29 ноября 2010

Я немного борюсь за то, когда или как активировать / сделать видимым 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 Ответ

0 голосов
/ 03 декабря 2010

На самом деле события 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;
      }
  }

}

...