我正试图在WPF中掌握ControlTemplates。我注意到,当您尝试引用模板化父项的背景颜色时 - 对于elipse Fill和elipse GradientStop,绑定语句似乎不同。任何人都可以解释为什么会这样。
这有效......
<Ellipse RenderTransformOrigin=".5,.5" Fill="{TemplateBinding Background}">
这有效......
<GradientStop Offset="0" Color="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background.Color}"/>
这不起作用 - 这是为什么?
<GradientStop Offset="0" Color="{TemplatedParent Background}"/>
这会产生错误......
<GradientStop Offset="0" Color="{TemplatedParent Background.Color}"/>
这不起作用......
<Ellipse RenderTransformOrigin=".5,.5" Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background.Color}">
实例看起来像这样......
<Button Template="{StaticResource buttonTemplate1}"
Height="100" Width="100" FontSize="40"
Background="Violet" Foreground="Aquamarine"
Padding="0" Margin="6">Button 5</Button>
答案 0 :(得分:2)
如评论中所述,您需要区分Brush
和Color
类型属性。
Brush
- 控件使用类型化的属性,包括Fill
,Stroke
和Background
。Color
最常见的用途是Brush
的一个组成部分,可以是SolidColorBrush
的颜色,也可以是GradientStop
的颜色LinearGradientBrush
的颜色1}}。您发布的示例中也存在一些绑定语法错误。
这不起作用 - 这是为什么?
<GradientStop Offset="0" Color="{TemplatedParent Background}"/>
这不是有效的绑定语法。但假设您的意思是TemplateBinding Background
,那么它仍然无效,因为目标Color
与源Background
(Brush
)的类型不同。
这会产生错误......
<GradientStop Offset="0" Color="{TemplatedParent Background.Color}"/>
与上述问题相同,您的意思是TemplateBinding
而不是TemplatedParent
。并且,我相信在任何情况下TemplateBinding
都不会为嵌套属性工作。你需要写:
<GradientStop Offset="0" Color="{TemplateBinding
RelativeSource={RelativeSource TemplatedParent}, Path=Background.Color}" />
这不起作用......
<Ellipse RenderTransformOrigin=".5,.5" Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background.Color}">
此处的语法正确,但类型不匹配 - 目标为Brush
,来源为System.Color
。