如何使WPF Adorner可见

时间:2010-11-29 07:35:18

标签: c# wpf adorner adornerlayer

我正在努力解决何时或如何激活/使MoveAdorner可见。

我尝试以下但没有成功:在要装饰的元素中,我在GotFocus事件中添加了Adorner。仅此一点是不够的,所以我添加了对InvalidateVisual()的调用。但没有任何反应。有没有人暗示如何让这些装饰品可见?

    protected void MyUIElement_GotFocus( object sender, RoutedEventArgs e )
    {
        AdornerLayer layer = AdornerLayer.GetAdornerLayer( this );
        layer.Add( new MoveAdorner( this ) );
        layer.InvalidateVisual( );
    }

对于澄清:装饰元素是一个位于自定义ItemsControl的派生面板内的Control。

MoveAdorner派生自Adorner,只需在控件的顶部和底部绘制两个Box。

亲切的问候

1 个答案:

答案 0 :(得分:0)

事实上,Got / Lost Focus事件对于这种情况并不是很好。想象一下,您想要显示可以获得焦点的其他输入控件。

现在我已经连接到LeftButtonUpEvent并隐藏所有其他Adorners并且只显示当前元素的Adorner。

此外,还会根据要求添加装饰器。此方法在Control中定义为“装饰”。

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;
      }
  }

}