Инвертированный радиус угла в WPF (что-то вроде отрицательного радиуса)

#c# #.net #wpf #visual-studio #wpf-controls

#c# #.net #wpf #visual-studio #wpf-элементы управления

Вопрос:

Я пытаюсь создать границу с отрицательным радиусом угла, например:

введите описание изображения здесь

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

Ответ №1:

Ну, я столкнулся с той же проблемой и попытался найти решение. И последнее, но не менее важное: я пришел к выводу, что это невозможно решить с помощью a border .

Я сосредоточился на рисовании Border с Path CombinedGeometry помощью функции и .

Если кто-то все еще ищет решение, как сделать перевернутые круглые углы, вот мое решение:

 <Grid>
            <Path Stroke="Black" Fill="White" StrokeThickness="10" Stretch="Fill">
                <Path.Data>
                    <CombinedGeometry GeometryCombineMode="Exclude">
                        <CombinedGeometry.Geometry1>                                
                            <RectangleGeometry Rect="100,200 200,100"/>
                        </CombinedGeometry.Geometry1>
                        <CombinedGeometry.Geometry2>
                            <EllipseGeometry RadiusX="50" RadiusY="50" Center="300,300" />
                        </CombinedGeometry.Geometry2>
                    </CombinedGeometry>
                </Path.Data>
            </Path>
    <Button Margin="10" Height="10" Width="10"/>
</Grid>
  

Вы можете изменить размер Rectangle , изменив значения в RectangleGeometry Rect="100,200 200,100 и добавив в него любой другой элемент WPF .. в этом случае я добавил Button .

Вот результат:

Скриншот результата

Ответ №2:

Вы могли бы использовать a Border в Border

 <Border Background="Black">
    <Border Margin="10" Background="White" CornerRadius="20">
        <!-- ... -->    
    </Border>
</Border>
  

введите описание изображения здесь

Комментарии:

1. Это не совсем то, что я хочу, на картинке показана полная граница, как она должна выглядеть в конце.

2. Хорошо, это, кажется, не самое элегантное решение, но оно работает. Теперь я использую две границы. Они не входят друг в друга, но оба хорошо расположены в сетке.

3. Этот ответ не решает исходную проблему. @Tokk если вы решили исходную проблему, используя границу внутри границы, пожалуйста, поделитесь, как вы это сделали.