Подтвердить что ты не робот

Как создать пользовательский элемент управления WPF, например, мультяшный пузырь с постоянными углами

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

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

Буду признателен, что кто-то может указать мне в правильном направлении.

удалена мертвая ссылка ImageShack

Вот окончательная версия пользовательского контроля мультяшного пузыря. Я добавил прямоугольник без штриха к версии Jobi Joy, чтобы скрыть конец линий пути, вместо того, чтобы пытаться сделать, затем появится заподлицо с прямоугольником.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="40"/>
    </Grid.RowDefinitions>
    <Rectangle Fill="#FF686868" Stroke="#FF000000" RadiusX="10" RadiusY="10"/>
    <Path Fill="#FF686868" Stretch="Fill" Stroke="#FF000000" HorizontalAlignment="Left" Margin="30,-5.597,0,-0.003" Width="25" Grid.Row="1" Data="M22.166642,154.45381 L29.999666,187.66699 40.791059,154.54395"/>                  
    <Rectangle Fill="#FF686868" RadiusX="10" RadiusY="10" Margin="1"/>
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="25" Text="Hello World" TextWrapping="Wrap"/>                       
</Grid>
4b9b3361

Ответ 1

Используйте этот XAML, вы можете создать PopUp или ContentControl и можете дать этой Grid как шаблон управления на нем, чтобы получить последовательный вид

<Grid x:Name="grid">
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="40"/>
    </Grid.RowDefinitions>
    <Rectangle Fill="#FF686868" Stroke="#FF000000" RadiusX="10" RadiusY="10"/>
    <Path Fill="#FF686868" Stretch="Fill" Stroke="#FF000000" HorizontalAlignment="Left" Margin="30,-1.6,0,0" Width="25" Grid.Row="1" 
        Data="M22.166642,154.45381 L29.999666,187.66699 40.791059,154.54395"/>          
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="25" Text="Hello World" TextWrapping="Wrap"/>           
</Grid>

удалена мертвая ссылка ImageShack

Я сделал сообщение в блоге

Ответ 2

Округлые углы могут быть только границей с установленным углом.

Стрелкой константы/речи может быть путь, который помещается в сетку вместе с рамкой.

Посмотрите на шаблон управления для GroupBox и посмотрите, как размещается контент "Заголовок", чтобы плавать над границей поля группы.

Вы сделали бы то же самое, за исключением того, что вы бы позиционировали Path внизу, а не сверху.