Как создать пользовательский элемент управления 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>
Ответы
Ответ 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 внизу, а не сверху.