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}}" />