我控制内容" MyControl"这有一个属性" GlobalBackground"。 对于我有这样风格的物品。
<ControlTemplate x:Key="XTemplate" TargetType="{x:Type local:MyControlItem}">
<Grid HorizontalAlignment="Stretch">
<Rectangle Height="2" Fill="{Binding GlobalBackground, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:MyControl}}"/>
...
</Grid>
</ControlTemplate>
<Style x:Key="XStyle" TargetType="{x:Type local:MyControlItem}">
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template" Value="{StaticResource XTemplate}"/>
</Style>
这可以按预期工作。
现在我想使用绑定到Itemscontrol的不同属性的相同模板。 所以想法是通过setter设置属性(Style Triggers) 当我这样做时
<ControlTemplate x:Key="XTemplate" TargetType="{x:Type local:MyControlItem}">
<Grid HorizontalAlignment="Stretch">
<Rectangle Height="2" Fill="{TemplateBinding Background}"/>
...
</Grid>
</ControlTemplate>
<Style x:Key="XStyle" TargetType="{x:Type local:MyControlItem}">
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Background" Value="{Binding GlobalBackground, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:MyControl}}" />
<Setter Property="Template" Value="{StaticResource XTemplate}"/>
</Style>
绑定失败。
没有办法在样式设置器中使用FindAncestor绑定,或者我只是做错了什么?
曼弗雷德
答案 0 :(得分:0)
您似乎在声明AncestorType
时出错...请参阅此示例:
<Button Foreground="Blue" Background="Red">
<Rectangle Margin="20" Width="50" Height="50">
<Rectangle.Style>
<Style>
<Setter Property="Rectangle.Fill" Value="{Binding Foreground,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Button}}}" />
</Style>
</Rectangle.Style>
</Rectangle>
</Button>