从不同的风格绑定到Style Setter

时间:2016-01-21 16:32:16

标签: c# wpf

如何将一个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>

3 个答案:

答案 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>