#.net #wpf #xaml #pathgeometry
#.net #wpf #xaml #геометрия пути
Вопрос:
Я пытаюсь нарисовать простой прямоугольник с «головкой стрелки», центрированной вверху, но, похоже, я не могу переместить эту головку стрелки в центр (как показано в следующем примере, головки стрелок всегда смещены влево)…
Вот мой XAML (на самом деле это внутри шаблона, но я не думаю, что это проблема)…
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="16" />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Rectangle Grid.Row="2"
Fill="{TemplateBinding Background}" />
<ContentPresenter Grid.Row="2"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
<Path HorizontalAlignment="Center"
Grid.Row="1"
Fill="{TemplateBinding Background}"
Data="M -8,0 L 0,-16 8,0" />
</Grid>
«Содержимое» для ContentPresenter — это StackPanel, которая может иметь или не иметь дочерних элементов TextBlock.
Что я делаю не так?
Ответ №1:
Пока это так Stretch
None
, путь ActualWidth
и ActualHeight
(и, следовательно, его выравнивание) не учитывает части его геометрии, которые нарисованы в отрицательных координатах.
Измените его на
<Path HorizontalAlignment="Center" Data="M 0,0 L 8,-16 16,0" ... />
или
<Path HorizontalAlignment="Center" Data="M -8,0 L 0,-16 8,0"
Stretch="Uniform" Width="16" Height="16" ... />
Комментарии:
1. Думаю, я должен еще раз поблагодарить вас; действительно признателен — мне не нужно говорить вам, что это, конечно, работает!