2010-11-29 5 views
1

Je me demande un peu quand et comment activer/rendre visible un MoveAdorner.Comment rendre WPF Adorner visible

J'essaie ce qui suit mais je n'ai pas de succès: Dans l'élément qui doit être décoré, j'ajoute l'Adorner dans l'événement GotFocus. Cela seul n'a pas suffi alors j'ai ajouté un appel à InvalidateVisual(). Mais rien ne se passe. Quelqu'un a-t-il un indice sur la façon de rendre ces ornements visibles?

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

Pour clarification: l'élément est enjolivées un contrôle qui est placé à l'intérieur d'un groupe dérivé d'un ItemsControl personnalisé.

Le MoveAdorner dérive de Adorner et dessine simplement deux boîtes sur les lignes supérieure et inférieure du contrôle.

Sincères salutations

Répondre

0

En fait, les événements A Got/perdus ne sont pas très bon pour cette situation. Imaginez que vous souhaitiez afficher des contrôles de saisie supplémentaires pouvant être mis en évidence.

Maintenant, je me suis connecté à LeftButtonUpEvent et à Hide all other Adorners et à seulement Afficher l'Adorner de l'élément actuel.

En outre, l'adorner est ajouté sur demande sur demande. Cette méthode est définie dans le contrôle qui doit être "orné".

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

}

Questions connexes