我正在尝试将RibbonTabHeader的属性绑定到其对应的RibbonTab的属性。但是,RibbonTab似乎不是RibbonTabHeader的祖先。我试图绑定自定义依赖项属性,但是为了简单起见,我们假设这是我想要做的:
<Style x:Key="DynamicHeader" TargetType="r:RibbonTabHeader">
<Setter Property="Tooltip"
Value="{Binding Name,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type r:RibbonTab}}/>
知道此等效项会产生预期的结果,其中工具提示为“ rbnTab1”:
<Style x:Key="DynamicHeader" TargetType="r:RibbonTabHeader">
<Setter Property="Tooltip"
Value="{Binding Name,
ElementName=rbnTab1}/>
如何直接以样式重新创建此行为,以便将其应用于任何所需标签的任何标题?像这样:
<r:RibbonTab Name="rbnTab2" Header="Tab 2" HeaderStyle="{StaticResource DynamicHeader}">
<r:RibbonTab Name="rbnTab3" Header="Tab 3" HeaderStyle="{StaticResource DynamicHeader}">
答案 0 :(得分:0)
为了结束本主题,我最终要做的是:
最后,我无法从选项卡本身找到属性的绑定路径。相反,我没有为选项卡绑定属性,而是为选项卡标题定义了自定义样式,该样式基于原始样式,并在该样式中为标题本身设置了属性。出于良好的考虑,我的示例还包括了我正在使用的自定义依赖项属性(尽管我认为问题不存在,因为我使用其他自定义依赖项属性就很好了)
MainWindow.xaml:
<Style x:Key="DynamicHeader" TargetType="r:RibbonTabHeader">
<Setter Property="BorderBrush" Value="{Binding Path=(ext:Tab.TabColor),
RelativeSource={RelativeSource Self},
Converter={core:StringToBrushConverter}}"/>
[...]
</Style>
[...]
<r:RibbonTab Name="rbnTab2" Header="Tab 2">
<r:RibbonTab.HeaderStyle>
<Style TargetType="RibbonTabHeader" BasedOn="{StaticResource DynamicHeader}">
<Setter Property="ext:Tab.TabColor" Value="CornflowerBlue"/>
</Style>
</r:RibbonTab.HeaderStyle>
</r:RibbonTab>
ControlExtensions.cs :(自定义依赖项属性)
public class Tab {
public static readonly DependencyProperty TabColorProperty =
DependencyProperty.RegisterAttached("TabColor", typeof(string), typeof(Tab), new
PropertyMetadata(default(string)));
public static void SetTabColor(UIElement element, string value) {
element.SetValue(TabColorProperty, value);
}
public static string GetTabColor(UIElement element)
{
return (string)element.GetValue(TabColorProperty);
}
}