我使用下面的ControlTemplate中有一个按钮。
<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>
但是当我点击我的应用程序的按钮,它没有勾勒路径,而是原始的按钮。
我不能完全弄清楚如何获得按钮以反映路径本身。 任何帮助非常感谢,谢谢!
如果你想改变焦点矩形的形状(虚线边框指示键盘焦点),你需要创建一个自定义FocusVisualStyle
,在相同形状的按钮,内容绘制虚线路径:
<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}"
请注意,它可能会更清洁,来定义Style
的按钮,并且有它同时应用Template
和FocusVisualStyle
你。
或者,你可以摆脱视觉焦点完全通过设定FocusVisualStyle="{x:Null}"
。 您可能会选择这样做,简单地画一个焦点暗示对你的日常Template
通过,例如,改变路径的笔触与IsKeyboardFocused
触发。
顺便说一句,你可能需要设置Stretch
到Uniform
在两个模板的路径。 UniformToFill
可引起削波。
你试图把你的路径和你的文本块周围的其他方法:
<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>