2011-10-09 15 views
13

La propiedad UIElement.Clip toma un objeto Geometry y lo utiliza para recortar el exterior del UIElement. Me gustaría hacer la inversión geométrica y perforar un agujero en el elemento en su lugar.Cómo invertir la geometría de recorte en Silverlight/WPF?

¿Alguien sabe cómo hacer esto?

Imagino que crear una versión invertida de la geometría del clip funcionaría, pero no puedo encontrar la manera de hacerlo.


EDITAR Parece que WPF tiene Geometry.Combine que puede ser utilizado para restar una geometría de otro, aunque esto no está disponible en Silverlight. Si fuera así, podría restar la geometría del clip del rectángulo del rectángulo delimitador del elemento, y usarlo para cortar en su lugar.

Respuesta

14

Un enfoque en Silverlight es utilizar un GeometryGroup e incluir en el grupo un rectángulo muy grande que comienza en una posición negativa distante.

Por ejemplo el siguiente cuadro azul tiene un orificio cuadrado más pequeño: -

<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>