10
votes

WPF Adorner Coupure

J'ai un itemsControl dans un ScrollViewer . Les éléments du itemsControl sont étendus à un datatemplate qui consiste essentiellement en un adorner .

Maintenant, le problème est que, lors du défilement, les enfants visuels du adorner sont visibles en dehors de l'enveloppe ScrollViewer . Disons que je fais défiler à partir du décalage horizontal de 0 à 100, les enfants visuels du Adorner se déplacent vers la gauche et sont visibles à côté du ScrollViewer , bien qu'ils soient cachés. Réglage Cliptobounds sur le itemsControl ou le ScrollViewer ne fonctionne pas.

Je comprends, que adorner est rendu au-dessus de tous les éléments Z-commander sage, mais ils ne devraient vraiment pas être visibles dans de tels cas car avec le ScrollViewer . L'élément orné se comporte comme prévu et n'est pas visible via le ScrollViewer .

Y a-t-il un moyen simple de "couper" le adorner s, de sorte qu'ils ne sont visibles que dans la zone de défilement visible?

merci, Andrej


2 commentaires

Dans le thread suivant, Wei Zhou reconstitue la vision de ScrollViewer afin que l'adorateur du bouton soit contraint. Mettre en œuvre la sélection de la sélection - Conseil s'il vous plaît


Quelle version de .NET / WPF est-ce que cela s'est produit pour vous? J'essaie réellement de recréer ce comportement et je ne peux pas. Fondamentalement, je veux que mes ornières d'erreur affichent au-delà des limites de la vision de ScrollViewer (sans utiliser de popup)


3 Réponses :


2
votes

J'ai rencontré le même problème lors de la sous-classement du wPfoolkit DataGrid pour dessiner un adorateur autour de la cellule actuelle.

Le contenu de la ScrollViewer est rendu par une instance ScrollContentSenterPresenter. ScrollContentPresenter possède sa propre couche Adorner, accessible via la propriété ScrollContentPresenter.adornerLayer.

J'ai trouvé que mon Adorner se clipse correctement si je l'ajoute à cette couche.


1 commentaires

J'utilise Visualtreehelper pour rechercher l'arborescence visuelle jusqu'à ce que je trouve un descendant de type ScrollContentPresenter. Jetez un oeil à la méthode de ce fil - WPF.CODEPLEX.COM/THRead/ Voir.aspx? Threadid = 34542 .



11
votes

Réglage Cliptobounds sur le contrôle contenant ne suffit pas. Vous devez définir la propriété ISclipenAcédée de l'adorner aussi.


1 commentaires

C'était la meilleure solution pour moi.



0
votes

Ma solution consistait à pousser une région de clip sur le contexte de dessin, rendant tout ce dont j'avais besoin et que vous avez la touche à la fin, comme ceci:

drawingContext.PushClip(new RectangleGeometry(new Rect(0, 0, this.AdornedElement.RenderSize.Width, this.AdornedElement.RenderSize.Height)));
// continue drawing
drawingContext.Pop();


0 commentaires