Zorder avec des éléments personnalisés dans une boîte à liste - Silverlight
-
26-09-2019 - |
Question
Je cuisine un bouton personnalisé. Cette La capture d'écran sera utile. Il n'y a aucun problème avec le bouton comme le montre l'image car le badge est suspendu à gauche. Mais si je veux que l'insigne accroche à droite, l'élément suivant dans la boîte de liste obscurcira les parties de l'insigne qui vont au-delà des limites de son conteneur (la largeur du bouton). Maintenant, je ne peux pas résoudre ce problème avec le zoorder, non? Parce que cela ne s'applique qu'à la commande dans son conteneur, dans ce cas, le ListBoxItem. Y a-t-il quelque chose qui peut être fait ici? Pour info, j'espère éviter une solution de travail, comme mettre des marges suffisamment grandes pour donner la salle des badges. je avoir un autre bouton personnalisé dont le texte est modifiable et l'expansion de la zone de texte utilisée pour prendre le texte entré dépensera bien au-delà du bouton sous-jacent.
La solution
Vous devez ajouter un zindex au contenant ListBoxItem
lui-même. Une approche qui pourrait fonctionner pour un petit ensemble d'articles, alors créez un nouveau ListBox
taper.
public class ZOrderedListBox : ListBox
{
private int _ZIndex = 0;
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);
Canvas.SetZIndex((UIElement)element, _ZIndex--);
}
}
La ZorderedListBox
Ci-dessus, attribuera un zindex descendant afin que les éléments précédents aient un zindex plus élevé que ceux ultérieurs. Mise en garde Cette solution simpliste fonctionne uniquement avec StackPanel
Comme le panneau des éléments, cela ne fonctionnera pas avec la valeur par défaut VirtualizingStackPanel
, ce qui prendra une plus grande sophistication.