WPF RibbonTabHeader 样式绑定到 RibbonTab 属性
WPF RibbonTabHeader style binding to RibbonTab property
我正在尝试将 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}/>
如何直接在样式中重新创建此行为,以便我可以将其应用于任何所需选项卡的任何 header? 像这样:
<r:RibbonTab Name="rbnTab2" Header="Tab 2" HeaderStyle="{StaticResource DynamicHeader}">
<r:RibbonTab Name="rbnTab3" Header="Tab 3" HeaderStyle="{StaticResource DynamicHeader}">
为了结束这个话题,我最终做了以下事情:
最后,我无法从选项卡本身找到 属性 的绑定路径。相反,我没有从选项卡绑定到 属性,而是为选项卡 header 定义了一个基于原始样式的自定义样式,并且我为 [=22] 设置了 属性 =] 本身在那种风格中。为了更好地衡量,我的示例还包括我正在使用的自定义依赖项 属性(尽管我认为问题不存在,因为我使用其他自定义依赖项属性就好了):
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);
}
}
我正在尝试将 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}/>
如何直接在样式中重新创建此行为,以便我可以将其应用于任何所需选项卡的任何 header? 像这样:
<r:RibbonTab Name="rbnTab2" Header="Tab 2" HeaderStyle="{StaticResource DynamicHeader}">
<r:RibbonTab Name="rbnTab3" Header="Tab 3" HeaderStyle="{StaticResource DynamicHeader}">
为了结束这个话题,我最终做了以下事情:
最后,我无法从选项卡本身找到 属性 的绑定路径。相反,我没有从选项卡绑定到 属性,而是为选项卡 header 定义了一个基于原始样式的自定义样式,并且我为 [=22] 设置了 属性 =] 本身在那种风格中。为了更好地衡量,我的示例还包括我正在使用的自定义依赖项 属性(尽管我认为问题不存在,因为我使用其他自定义依赖项属性就好了):
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);
}
}