Геометрия пути WPF; рисование прямоугольника с центрированной стрелкой в верхней части

#.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. Думаю, я должен еще раз поблагодарить вас; действительно признателен — мне не нужно говорить вам, что это, конечно, работает!