最近,我需要更改Thumb的模板。我想像这样将其形状更改为三角形。我使用路径作为其ControlTemplate。这是代码:
<Thumb
Width="100"
Height="30"
HorizontalAlignment="Left"
VerticalAlignment="Top">
<Thumb.Template>
<ControlTemplate>
<Path Fill="Red">
<Path.Data>
<PathGeometry>
<PathFigure>
<PolyLineSegment>
<PolyLineSegment.Points>
<PointCollection>
<Point X="0" Y="0" />
<Point X="{TemplateBinding Width}" Y="{TemplateBinding Height}" />
<Point X="0" Y="{TemplateBinding Height}" />
</PointCollection>
</PolyLineSegment.Points>
</PolyLineSegment>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</ControlTemplate>
</Thumb.Template>
</Thumb>
您可以看到我尝试将PolyLineSegment.Points绑定到Thumb的Width和Height。
但是Visual Studio抛出错误:
“类型为'System.Windows.TemplateBindingExpression'的错误对象
不能转换为类型'System.Double'。”
我不知道为什么它不起作用。谁能给我一个提示?
更新:
我发现这是因为Point.X或Point.Y不是依赖项属性。这就是为什么绑定不起作用的原因。
我通过绑定到LineSegment来解决此问题。此问题已结束。
答案 0 :(得分:0)
最后,我找到了问题所在(原因已在更新中),并找到了解决此问题的新方法。
<ControlTemplate>
<Path Fill="{TemplateBinding Background}">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="0 0">
<LineSegment>
<LineSegment.Point>
<MultiBinding Converter="{StaticResource thumb2PointConverter}" ConverterParameter="rightBottom">
<Binding Path="Width" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Thumb}" />
<Binding Path="Height" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Thumb}" />
</MultiBinding>
</LineSegment.Point>
</LineSegment>
<LineSegment>
<LineSegment.Point>
<MultiBinding Converter="{StaticResource thumb2PointConverter}" ConverterParameter="leftBottom">
<Binding Path="Width" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Thumb}" />
<Binding Path="Height" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Thumb}" />
</MultiBinding>
</LineSegment.Point>
</LineSegment>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</ControlTemplate>