1

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 の派生 Panel 内に配置される Control です。

は、コントロールの上部と下部の行にある 2 つのボックスから派生し、単純に描画しますMoveAdornerAdorner

よろしく

4

1 に答える 1

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

}

于 2010-12-03T10:08:38.587 に答える