2017-08-01 1 views
0

Je pense que j'ai pu trouver un bogue dans WPF, ou peut-être que je ne comprends pas tout à fait comment fonctionne OpacityMasks. Comme vous pouvez le voir sur la première image, j'ai un chemin en forme de diamant et un cercle rouge. Mon but est de rendre invisible tout ce qui est en dehors du diamant. Cela fonctionne quand le cercle est à l'intérieur de la forme de diamant, mais chaque fois que je le déplace vers l'un des coins, ou en dehors du chemin, le masque d'Opacité semble être étiré ou déformé comme vous pouvez le voir sur la deuxième image. Ma question est de savoir comment je peux faire fonctionner le masque Opacity indépendamment de l'endroit où se trouve le cercle (ou tout autre élément enfant).WPF OpacityMask comportement étrange

First image

Second Image

Et voici mon code XAML

<Grid Name="rootGrid"> 
    <Grid> 
     <Grid.OpacityMask> 
      <VisualBrush Visual="{Binding ElementName=path}"/> 
     </Grid.OpacityMask> 
     <Path Name="path" 
       Stretch="Fill" 
       Fill="Cyan" 
       StrokeThickness="1" 
       Stroke="GreenYellow" 
       Data="M 0,-1 1,0 0,1 -1,0 0,-1"/> 
     <Ellipse Fill="Red" 
       Margin="20,-17,22,61"/> 
    </Grid> 
</Grid> 

Désolé pour l'affichage des images avec des liens, mais je ne l'ai pas assez réputation pour intégrer directement les images.

Toute aide est appréciée!

+0

Ce n'est pas un bug. VisualBrush est étendu à toute la zone de grille visible, qui s'étend verticalement de -17 à ActualHeight de la grille. Définissez 'ViewportUnits =" Absolute "' sur VisualBrush, puis définissez sa propriété Viewport sur un rectangle approprié, par ex. 'Viewport =" 0,0,100,100 "' – Clemens

+0

Merci, cela a résolu mon problème. –

Répondre

0

Clemens a résolu mon problème

Set ViewportUnits = "absolu" sur le VisualBrush, puis définissez sa propriété Viewport à un rectangle approprié, par exemple Viewport = "0,0,100,100"