WPF RibbonTabHeader样式绑定到RibbonTab属性

时间:2018-06-22 15:19:19

标签: wpf binding tabs header ribbon

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

1 个答案:

答案 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);
  }
}
相关问题