<Style x:Key="OpenFolderButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Path x:Name="iconPath"
Width="27"
Height="27"
Data="M928 444768z"
Fill="#AAAAAA"
Stretch="Uniform" />
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="iconPath" Property="Fill" Value="#169BD5" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="iconPath" Property="Fill" Value="#169BD5" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Data的值不完整,有省略。
以上button样式,有个问题是:
即使是一个完整的图片,但是鼠标移到ico的空白区域,鼠标不会改变形状,相当于没移到上面,但实际是在上面的。
主要的问题是,要将path用 StackPanel 和grid包起来,才能形成一个整体。所以,写一个母模板,其他的样式继承。以button为例,母模板如下:
实现的功能是:鼠标移动上面改变背景色,点击变颜色
其中的data,用的是ico代码
<Style x:Key="BaseButton" TargetType="{x:Type Button}" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid Background="Transparent" Margin="0,0,0,0" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">
<StackPanel x:Name="iconPath" Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Path Data="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}"
Style="{StaticResource GridRecordButtonStyle}" x:Name="icon"/>
</StackPanel>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Fill" Value="{DynamicResource ToggleButtonMouseOverFill}" TargetName="icon"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Fill" Value="{DynamicResource ToggleButtonMouseOverFill}" TargetName="icon"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
按钮一
Tag的value值不完整,有省略。
<Style x:Key="RecordDetailButton" TargetType="{x:Type Button}" BasedOn="{StaticResource BaseButton}">
<Setter Property="Tag" Value="M5,3C3.89,3 3"></Setter>
</Style>
按钮二
Tag的value值不完整,有省略。
<Style x:Key="RecordEditButton" TargetType="{x:Type Button}" BasedOn="{StaticResource BaseButton}">
<Setter Property="Tag" Value="M521.258667 "></Setter>
</Style>
xaml中调用
按钮一
<Button Style="{StaticResource RecordDetailButton}" />
按钮二
<Button Style="{StaticResource RecordEditButton}" />