如何使按钮形状成为WPF中的自定义路径?

如何使按钮形状成为WPF中的自定义路径?,wpf,button,path,shape,Wpf,Button,Path,Shape,我有一个按钮使用下面的控件模板 <ControlTemplate x:Key="ControlTemplate" TargetType="{x:Type Button}"> <Grid> <Path x:Name="ButtonPath" Fill="{Binding IsSelected, Converter={StaticResource ArrowBackgroundColorConverter}, UpdateSour

我有一个按钮使用下面的控件模板

<ControlTemplate x:Key="ControlTemplate" TargetType="{x:Type Button}">
        <Grid>
            <Path x:Name="ButtonPath" Fill="{Binding IsSelected, Converter={StaticResource ArrowBackgroundColorConverter}, UpdateSourceTrigger=PropertyChanged}"  
                  Data="{Binding Converter={StaticResource ArrowPathSelector}}" Stretch="UniformToFill" Margin="0 0 -35 0"></Path>
            <TextBlock Grid.Column="0" Grid.Row="0" FontFamily="{StaticResource ApplicationFont}" FontSize="{StaticResource Heading3}" HorizontalAlignment="Center" Margin="35 0 0 0" VerticalAlignment="Center" Text="{Binding Title}" Foreground="White"/>
        </Grid>
    </ControlTemplate>

但当我在我的应用程序中点击按钮时,它并没有勾勒出路径,而是原来的按钮


我不太明白如何让按钮反映路径本身。非常感谢您的帮助,谢谢

您是否尝试过将路径和文本块以另一种方式放置:

<ControlTemplate x:Key="ControlTemplate" TargetType="{x:Type Button}">
    <Grid>
        <TextBlock Grid.Column="0" Grid.Row="0" FontFamily="{StaticResource ApplicationFont}" FontSize="{StaticResource Heading3}" HorizontalAlignment="Center" Margin="35 0 0 0" VerticalAlignment="Center" Text="{Binding Title}" Foreground="White"/>
        <Path x:Name="ButtonPath" Fill="{Binding IsSelected, Converter={StaticResource ArrowBackgroundColorConverter}, UpdateSourceTrigger=PropertyChanged}"  
              Data="{Binding Converter={StaticResource ArrowPathSelector}}" Stretch="UniformToFill" Margin="0 0 -35 0"></Path>
    </Grid>
</ControlTemplate>

如果要更改焦点矩形的形状(虚线边框指示键盘焦点),则需要创建一个自定义的
焦点视觉样式
,该样式以与按钮内容相同的形状绘制虚线路径:

<Style x:Key="ButtonFocusRectangle" TargetType="Control">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate>
        <Path Stroke="Black"
              StrokeDashArray="2 2"  
              Data="M 0,0 50,50 100,0 Z"
              Stretch="UniformToFill"
              Margin="0 0 -35 0" />
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

然后,在按钮上,设置
FocusVisualStyle=“{StaticResource ButtonFocusRectangle}”
。请注意,为按钮定义自定义的
样式
,并让它同时应用
模板
焦点视觉样式
可能会更简洁

或者,您也可以通过设置
FocusVisualStyle=“{x:Null}”
完全摆脱焦点视觉。您可以选择这样做,只需在常规的
模板中绘制焦点提示,例如,使用
IsKeyboardFocused
触发器更改路径的笔划


另一方面,您可能希望在两个模板中的路径上设置
Stretch
Uniform
UniformToFill
会导致剪切。

是否设置按钮的
Template=“{StaticResource ControlTemplate}”
?是的。问题是当我将鼠标悬停在按钮上或单击按钮时,轮廓在矩形按钮上,我希望它是我使用的路径,即箭头。这没有任何意义。如果您要覆盖按钮的
模板
,则没有任何东西可以给它一个矩形轮廓——它来自您要替换的原始模板。您是否将此嵌入另一个按钮中?您能否验证正在应用模板,例如,路径是否显示?是,路径显示。等等,您指的是普通按钮边框的矩形轮廓,还是焦点矩形(指示键盘焦点的虚线矩形)?