如何将一个Style setter的Foreground Color绑定到另一个Style Setter上的Fill Color,它应该是相同的对象类型。这是我下面的代码!
获取这些错误:
System.Windows.Data错误:4:找不到绑定源 引用' ElementName = MenuItemPath'。 BindingExpression:路径=填写; 的DataItem = NULL;目标元素是' TextBlock' (名称='&#39);目标 财产是'前景' (键入'刷')
<Style x:Key="MenuItemName" TargetType="TextBlock">
<Setter Property="Foreground" Value="{Binding ElementName=MenuItemPath, Path=Fill}" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Left" />
</Style>
<ControlTemplate x:Key="MenuItem" TargetType="RadioButton">
<ControlTemplate.Resources>
<Style TargetType="Path" x:Name="MenuItemPath">
<Setter Property="Fill" Value="#FF22252C" />
<Setter Property="Height" Value="25" />
<Setter Property="Width" Value="25" />
<Setter Property="Stretch" Value="Uniform" />
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type RadioButton}}, Path=IsChecked}" Value="True">
<Setter Property="Fill" Value="White" />
</DataTrigger>
</Style.Triggers>
</Style>
</ControlTemplate.Resources>
答案 0 :(得分:1)
就个人而言,我会创建一个单独的资源来存储画笔颜色,并从两个位置引用它。
<SolidColorBrush Color="#FF22252C" x:Key="MenuFillColor" />
<Style x:Key="MenuItemName" TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource MenuFillColor}" />
...
</Style>
<ControlTemplate x:Key="MenuItem" TargetType="RadioButton">
<ControlTemplate.Resources>
<Style TargetType="Path" x:Name="MenuItemPath">
<Setter Property="Fill" Value="{StaticResource MenuFillColor}" />
...
</Style>
</ControlTemplate.Resources>
</ControlTemplate>
那就是说,我从来没有真正尝试绑定到另一个Style的Setter.Value属性......可能假设一切都是相同的范围。您看起来可能有不同的范围,因为您使用<ControlTemplate.Resources>
将MenuItemPath样式的范围限制为仅仅ControlTemplate。但我个人不会尝试它,并会假设任何需要这样的东西的要求也可以更好的方式:)
答案 1 :(得分:1)
无法在wpf中访问其他样式的外部属性,这就是您遇到绑定错误的原因。相反,您可以在资源中以及从中可以访问它的地方声明颜色。
答案 2 :(得分:0)
我让它变得比需要的更复杂,我刚刚添加了一个修复问题的DataTrigger:
<Style x:Key="MenuItemName" TargetType="TextBlock">
<Setter Property="Foreground" Value="Black" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Left" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=MenuItemRadio}" Value="True">
<Setter Property="Foreground" Value="White" />
</DataTrigger>
</Style.Triggers>
</Style>