2010-11-29 15 views
1

Ich kämpfe ein bisschen darüber, wann oder wie man einen MoveAdorner aktiviert/sichtbar macht.Wie man WPF Adorner sichtbar macht

Ich versuche Folgendes, aber keinen Erfolg: In das Element, das geschmückt werden soll, füge ich den Adorner in das GotFocus-Ereignis ein. Das alleine reichte nicht aus, also fügte ich einen Anruf zu InvalidateVisual() hinzu. Aber nichts passiert. Hat jemand einen Hinweis darauf, wie man diese Adoren sichtbar macht?

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

Zur Klarstellung: das adorned Element ein Steuerelement, das innerhalb einer abgeleiteten Tafel eines benutzerdefinierten Items positioniert ist.

Die MoveAdorner stammt von Adorner und zeichnet einfach zwei Boxen auf der oberen und unteren Zeile des Steuerelements.

mit freundlichen Grüßen

Antwort

0

In der Tat der Got/Fokus verloren Ereignisse für diese Situation nicht sehr gut sind. Stellen Sie sich vor, Sie möchten zusätzliche Eingabesteuerelemente einblenden, die den Fokus erhalten können.

Jetzt habe ich in den LeftButtonUpEvent und versteckte alle anderen Adoren und nur die Adorner des aktuellen Elements anzeigen.

Auch der Adorner ist auf Anfrage bei Bedarf hinzugefügt. Diese Methode ist in der Steuerung definiert, die "geschmückt" werden soll.

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

}