Подтвердить что ты не робот

Как инвертировать геометрию отсечения в Silverlight/WPF?

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

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

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


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

4b9b3361

Ответ 1

Один подход в 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>