WPF RibbonTabHeader样式绑定到RibbonTab属性

WPF RibbonTabHeader样式绑定到RibbonTab属性,wpf,binding,tabs,header,ribbon,Wpf,Binding,Tabs,Header,Ribbon,我正在尝试将RibbonTabHeader的属性绑定到其相应RibbonTab的属性。但是,RibbonTab似乎不是RibbonTabHeader的祖先。我试图绑定自定义依赖属性,但为了简单起见,我们假设这就是我想要做的: <Style x:Key="DynamicHeader" TargetType="r:RibbonTabHeader"> <Setter Property="Tooltip"

我正在尝试将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}}/>

如何在样式中直接重新创建此行为,以便将其应用于任何所需选项卡的任何标题?如下所示:

<r:RibbonTab Name="rbnTab2" Header="Tab 2" HeaderStyle="{StaticResource DynamicHeader}">
<r:RibbonTab Name="rbnTab3" Header="Tab 3" HeaderStyle="{StaticResource DynamicHeader}">

为了结束这个话题,我最后做了以下几点:

最后,我无法从选项卡本身找到属性的绑定路径。相反,我没有从选项卡绑定到属性,而是基于原始样式为选项卡标题定义自定义样式,并在该样式中为标题本身设置属性。为了更好地衡量,我的示例还包括我正在使用的自定义依赖项属性(尽管我不认为存在问题,因为我使用了其他自定义依赖项属性):

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>
<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>
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);
  }
}