WPF OpacityMask странное поведение

Я думаю, что я мог найти ошибку в WPF, или, может быть, я просто не до конца понимаю, как работают OpacityMasks. Как вы можете видеть на первом изображении, у меня есть ромбовидная дорожка и красный круг. Моя цель - сделать все, что находится за пределами алмаза, невидимым. Он работает, когда круг находится внутри ромбовидной формы, но всякий раз, когда я перемещаю его в один из углов или за пределы контура, OpacityMask кажется растянутым или искаженным, как вы можете видеть на втором изображении. У меня вопрос, как я могу заставить OpacityMask работать независимо от того, где находится круг (или любой другой дочерний элемент).

Первое изображение

Второе изображение

И это мой код 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>

Извините за публикацию изображений со ссылками, но у меня недостаточно репутации, чтобы напрямую вставлять изображения.

Любая помощь приветствуется!

1 ответ

Решение

Клеменс решил мою проблему

Установите ViewportUnits="Absolute" в VisualBrush, а затем установите для его свойства Viewport соответствующий прямоугольник, например, Viewport="0,0,100,100"

Другие вопросы по тегам