Использовать объект WPF, чтобы «пробить» дыру в другом? - PullRequest
2 голосов
/ 12 апреля 2009

У меня есть эллипс, который является просто кругом. Моя проблема в том, что я хочу вырезать отверстие в форме круга из середины большего круга, и, похоже, ничего не работает. Я пробовал маски непрозрачности, и они не работали вообще.

Чтобы еще больше усложнить ситуацию, у большого круга есть эффект DropShadowEffect. Но поскольку круг слегка прозрачен, за ним можно увидеть большой теневой круг. Это не совсем то, на что похож макет, и мне интересно, есть ли способ заставить тень появляться только по краям круга, независимо от того, насколько прозрачен этот круг.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 12 апреля 2009

Например, вот так:

<Canvas>
<Path Stroke="Black">
  <Path.Data>
    <CombinedGeometry GeometryCombineMode="Exclude">
      <CombinedGeometry.Geometry1>
        <EllipseGeometry Center="100,100" RadiusX="100" RadiusY="100"></EllipseGeometry>
      </CombinedGeometry.Geometry1>
      <CombinedGeometry.Geometry2>
        <EllipseGeometry Center="100,100" RadiusX="80" RadiusY="80"></EllipseGeometry>
      </CombinedGeometry.Geometry2>
    </CombinedGeometry>
  </Path.Data>
</Path>
</Canvas>

Для тени: это тоже нужно решить, поскольку результирующий объект - это на самом деле круг с целым в нем, а не просто непрозрачность - «трюк»

1 голос
/ 12 апреля 2009

Вместо использования эллипса используйте Path, и пусть Path.Data будет CombinedGeometry, состоящей из двух эллипсов с использованием Exclude GeometryCombineMode.

...