Как инвертировать геометрию отсечения в Silverlight / WPF? - PullRequest
13 голосов
/ 09 октября 2011

Свойство UIElement.Clip принимает объект Geometry и использует его для удаления внешней части UIElement.Я хотел бы сделать геометрическую инверсию и пробить дыру в элементе.

Кто-нибудь знает, как это сделать?

Я думаю, что создание перевернутой версии геометрии клипа будет работать, ноЯ не могу найти способ сделать это.


РЕДАКТИРОВАТЬ Кажется, что WPF имеет Geometry.Combine, который можно использовать для вычитания одной геометрии издругой, хотя это не доступно в Silverlight.Если бы это было так, я мог бы вычесть геометрию клипа из прямоугольника ограничивающего прямоугольника элемента и использовать его вместо этого.

1 Ответ

15 голосов
/ 10 октября 2011

Один из подходов в Silverlight - использовать GeometryGroup и включить в группу очень большой прямоугольник, начинающийся с далекой отрицательной позиции.

Например, следующий синий квадрат имеет меньшее квадратное отверстие: -

    <Rectangle Fill="Blue" HorizontalAlignment="Center" VerticalAlignment="Center" Height="200" Width="200">
        <Rectangle.Clip>
            <GeometryGroup>
                <RectangleGeometry Rect="-2048 -2048 4096 4096" />
                <RectangleGeometry Rect="100 100 50 50" />
            </GeometryGroup>
        </Rectangle.Clip>
    </Rectangle>
...