#wpf #xaml #wpf-controls
#wpf #xaml #wpf-элементы управления
Вопрос:
Как я могу создать эллипс (путь, …) с отверстием в нем:
Задача состоит в том, чтобы создать визуализацию индикатора трех состояний. Различные состояния визуализируются поворотом элемента управления на несколько градусов влево или вправо.
Ответ №1:
=>
<Path Stroke="Red" StrokeThickness="20">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="80,0">
<ArcSegment x:Name="ArcSeg1" Size="100,100" RotationAngle="0" IsLargeArc="True"
SweepDirection="Clockwise" Point="20,0" >
</ArcSegment>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
Здесь есть несколько соответствующих свойств, чтобы понять математику, стоящую за этим, смотрите
http://www.charlespetzold.com/blog/2008/01/Mathematics-of-ArcSegment.html
Но в основном вы даете координаты пересечения двух эллипсов :
Начальная точка и Point представляют точки пересечения, а Size — размер полного эллипса. Остальное говорит само за себя. Если вы хотите повернуть его, самым простым и оптимальным способом было бы использовать RotateTransform .
Ответ №2:
Поможет ли создание «отверстия» в виде белого треугольника поверх полного круга? Это может быть повернуто вокруг центра круга в сочетании с «указателем» (линией).
Комментарии:
1. Я не знаю. Вот почему я спрашиваю. 😉
Ответ №3:
Вы можете использовать комбинированную геометрию с GeometryCombineMode="Exclude"
В документации есть хороший пример.
Комментарии:
1. Насколько я понял CombinedGeometry, второй эллипс также виден, потому что видимостью управляет окружающий контур, а не два объединенных геометрических объекта.
2. это неправда. GeometryCombineMode=’Exclude’ делает именно то, что он говорит, а CombinedGeometry — это «новая» геометрия, вычисленная на основе входных данных. Я действительно думаю, что это гораздо более гибкий подход, чем вычисление ArcSegment вручную.