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