我有一个按钮,使用下面的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>
但是当我单击我的应用程序中的按钮时,它不是概述路径而是原始按钮。
我无法弄清楚如何让按钮反映路径本身。非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
如果要更改焦点矩形的形状(指示键盘焦点的虚线边框),则需要创建一个自定义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
会导致剪辑。
答案 1 :(得分:0)
您是否尝试过将Path和文本块放在一起:
<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>