Wpf 模板是否可以绑定到几何图形
我目前有一个自定义的Wpf 模板是否可以绑定到几何图形,wpf,xaml,custom-controls,controltemplate,Wpf,Xaml,Custom Controls,Controltemplate,我目前有一个自定义的按钮控件,它通过类型为ControlTemplate的依赖属性在控件上显示一个DrawingImage集。我一直试图将绘图图像移动到控件模板中,并绑定到几何体,但失败了。是否可以绑定到几何体对象?如果不是,为什么不是,如果是,我错过了什么 下面的屏幕截图显示了我在右侧的成功尝试和在左侧的失败尝试 绑定到DrawingImage的示例(有效)-generic.xaml: <Style TargetType="{x:Type local:RoundButton3}">
按钮
控件,它通过类型为ControlTemplate
的依赖属性在控件上显示一个DrawingImage
集。我一直试图将绘图图像
移动到控件模板中,并绑定到几何体
,但失败了。是否可以绑定到几何体
对象?如果不是,为什么不是,如果是,我错过了什么
下面的屏幕截图显示了我在右侧的成功尝试和在左侧的失败尝试
绑定到DrawingImage的示例(有效)-generic.xaml:
<Style TargetType="{x:Type local:RoundButton3}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:RoundButton3}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Ellipse StrokeThickness="5" Stroke="Green"/>
<Viewbox Margin="10" Stretch="Uniform">
<ContentControl
Template="{TemplateBinding ImageTemplate}" />
</Viewbox>
<TextBlock VerticalAlignment="Center"
Grid.Column="1"
Text="Round Button" Margin="5,0,0,0" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type local:RoundButton2}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:RoundButton2}">
...
<Viewbox Margin="10" Stretch="Uniform">
<Image>
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Pen="{StaticResource RoundButtonPen}"
Geometry="{TemplateBinding Geometry}" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
</Viewbox>
...
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
像这样使用
<Grid.Resources>
<GeometryGroup x:Key="AddGeometry">
<LineGeometry StartPoint="25,12" EndPoint="25,38" />
<LineGeometry StartPoint="12,25" EndPoint="38,25" />
</GeometryGroup>
<ControlTemplate x:Key="RoundAddTemplate">
<Image SnapsToDevicePixels="True">
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<DrawingGroup>
<GeometryDrawing Pen="{StaticResource RoundButtonPen}" Geometry="{StaticResource AddGeometry}"/>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
</ControlTemplate>
</Grid.Resources>
<local:RoundButton3
Grid.Column="1"
Content="RoundButton3" ImageTemplate="{StaticResource RoundAddTemplate}"/>
就像
<local:RoundButton2
Grid.Column="0"
Geometry="{StaticResource AddGeometry}"
Content="RoundButton2" />
使用前面定义的AddGeometry资源。如果替换
<GeometryDrawing
Geometry="{TemplateBinding Geometry}" />
借
请参阅以获得解释。谢谢,我尝试了除此之外的所有方法:(你知道为什么我认为TemplateBinding相当于RelativeSource={RelativeSource TemplatedParent}?好的,我来看看,这就解释了。请看。
<local:RoundButton2
Grid.Column="0"
Geometry="{StaticResource AddGeometry}"
Content="RoundButton2" />
<GeometryDrawing
Geometry="{TemplateBinding Geometry}" />
<GeometryDrawing
Geometry="{Binding Geometry, RelativeSource={RelativeSource TemplatedParent}}" />