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

#.net #silverlight #geometry #clipping #clip

#.net #silverlight #геометрия #отсечение #клип

Вопрос:

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

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

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


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

Ответ №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>