0

我想在 ControlTemplate 内使用 GeometryDrawing 作为按钮图标,并且我希望它的Brush属性绑定到按钮的Foreground属性,但它不起作用。另一方面,如果我明确设置画笔,它就可以工作。

这是我的(非工作)代码:

    <Style x:Key="SimpleButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Background" Value="LightGray"/>
        <Setter Property="Foreground" Value="Black"/>
        <Setter Property="BorderThickness" Value="2"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border x:Name="border" 
                            BorderBrush="{TemplateBinding Foreground}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            Background="{TemplateBinding Background}"
                            SnapsToDevicePixels="true">
                        <StackPanel Orientation="Vertical">
                            <Image x:Name="buttonImage" Height="20" Width="20">
                                <Image.Source>
                                    <DrawingImage>
                                        <DrawingImage.Drawing>


                                            <!-- line below does not work -->
                                            <GeometryDrawing Brush="{TemplateBinding Foreground}">


                                                <GeometryDrawing.Geometry>
                                                    <EllipseGeometry RadiusX="15" RadiusY="15"/>
                                                </GeometryDrawing.Geometry>
                                            </GeometryDrawing>
                                        </DrawingImage.Drawing>
                                    </DrawingImage>
                                </Image.Source>
                            </Image>
                            <ContentPresenter x:Name="contentPresenter"/>
                        </StackPanel>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
4

1 回答 1

1

请参阅此WPF TemplateBinding 与 RelativeSource TemplatedParent - Paul Fischer 的回答。特别是关于 TemplateBinding 的这一部分:

• 不适用于 Freezables 上的属性

如果您查看GeometryDrawing,您可以看到它的继承层次结构包括 Freezable: GeometryDrawing:Drawing:Animatable:Freezable:DependencyObject:DispatcherObject:Object

因此,您不能在 Freezable GeometryDrawing 的 Brush 属性上使用 TemplateBinding。

您可以在 Border 的 BorderBrush 属性上使用 TemplateBinding,因为Border不继承自 Freezable:Border:Decorator:FrameworkElement:UIElement:Visual:DependencyObject:DispatcherObject:Object

于 2016-04-06T21:10:50.953 回答