我对 WPF 很陌生。下面是我尝试做的,以便对按钮使用相同controlTemplate
的按钮,它们之间的唯一区别是PathGeometry
值。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Shared.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style TargetType="Button" x:Key="buttonHeader">
<Setter Property="Width" Value="18" />
<Setter Property="Height" Value="18" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="BorderStyle" Background="Transparent" >
<Path
x:Name="CheckMark"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
SnapsToDevicePixels="False"
Stroke="#FF4D4D4D"
StrokeThickness="2" StrokeEndLineCap="Flat" StrokeStartLineCap="Flat"
Data="{DynamicResource geoPath}">
</Path>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="BorderStyle" Property="Background" Value="#B2FFFFFF" />
<Setter TargetName="CheckMark" Property="Stroke" Value="#D8727272" />
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter TargetName="BorderStyle" Property="Background" Value="#B2707070" />
<Setter TargetName="CheckMark" Property="Stroke" Value="#D8FFFFFF" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<PathGeometry x:Key="X_Sign">
<PathFigure StartPoint="0,0">
<LineSegment Point="10,10"/>
</PathFigure>
<PathFigure StartPoint="0,10">
<LineSegment Point="10,0"/>
</PathFigure>
</PathGeometry>
<PathGeometry x:Key="Min_Sign">
<PathFigure StartPoint="0,0">
<LineSegment Point="10,0"/>
</PathFigure>
</PathGeometry>
<Style x:Key="ButtonX" BasedOn="{StaticResource buttonHeader}" TargetType="Button">
<Style.Resources>
<StaticResource x:Key="geoPath" ResourceKey="X_Sign"/>
</Style.Resources>
</Style>
<Style x:Key="ButtonXMinimize" BasedOn="{StaticResource buttonHeader}" TargetType="Button">
<Style.Resources>
<StaticResource x:Key="geoPath" ResourceKey="Min_Sign"/>
</Style.Resources>
</Style>
</ResourceDictionary>
在设计器中,我实际上得到了我想要的,但是当我尝试运行应用程序时,我得到一个XamlParseException
并且 innerException 是:
无法将“System.Windows.Media.PathGeometry”类型的对象转换为“System.Windows.ResourceDictionary”类型
我错过了什么,我该如何解决?另外,我很高兴知道是否有更好的方法来做到这一点。
提前致谢。