如何将Pivot样式内PivotHeaderItem的Foreground绑定到Pivot的Background?
解决PivotHeaderItem的Foreground绑定到Pivot的Background问题
我之前也碰到过类似的绑定场景,用TemplateBinding和ElementName确实没法生效,这里给你说下原因和可行的解决方案:
为什么之前的方法失效?
- TemplateBinding:它只能绑定到当前控件(这里是
PivotHeaderItem)的模板目标元素的属性,没办法跨层级访问父级Pivot的属性,所以直接用它拿不到Pivot的Background。 - ElementName:在资源字典的样式中,
ElementName的命名范围受限,没法直接找到外层的Pivot实例,所以绑定会失败。
正确的绑定方式:使用RelativeSource
我们可以通过RelativeSource向上遍历视觉树,找到父级的Pivot元素,再绑定它的Background属性。具体代码如下:
<!-- 在你的PivotHeaderItem样式中添加这个Setter --> <Setter Property="Foreground" Value="{Binding Background, RelativeSource={RelativeSource AncestorType={x:Type Pivot}}}" />
补充说明
- 这个绑定会自动跟踪
Pivot.Background的变化,如果后续动态修改了Pivot的背景色,PivotHeaderItem的前景色也会同步更新(默认是OneWay绑定)。 - 如果你的Pivot嵌套层级比较深,可以加上
AncestorLevel参数指定查找的层级,比如AncestorLevel=1表示最近的父级Pivot。
内容的提问来源于stack exchange,提问作者Vijay Nirmal
相关产品推荐
相关产品推荐

