WPF绑定到datatrigger中的父内容

时间:2013-06-27 07:59:11

标签: wpf xaml styles datatrigger

我有一个带风格的自定义控件。该控件绑定到我的viewmodel

中的属性
<controls:PromoAlarmBox Content="{Binding Controller.IOGRP1W.Value}"/>

我想创建一个datatrigger,根据绑定值更改控件的颜色,这样可以正常工作

<Style TargetType="{x:Type local:PromoAlarmBox}">          
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ContentControl">
                    <Rectangle x:Name="PART_rectangle" VerticalAlignment="Stretch" Fill="Yellow" Stroke="Black" Height="20" Width="20"/>

                    <ControlTemplate.Triggers>
                            <DataTrigger Binding="{Binding Controller.IOGRP1W.Value, UpdateSourceTrigger=PropertyChanged}" Value="1">

                            <Setter Property="Fill" TargetName="PART_rectangle" Value="Red" />

                        </DataTrigger>
                    </ControlTemplate.Triggers>    
                </ControlTemplate>
            </Setter.Value>
        </Setter>           
    </Style>

到目前为止一切顺利。如果我在datatrigger中引用与控件绑定的相同属性,我可以使它工作。我的问题是我有相同控件的多个实例绑定到不同的值,我不想为它们中的每一个创建一个新的样式所以我的问题是我如何绑定到datatrigger中控件的绑定值

3 个答案:

答案 0 :(得分:1)

找到它。喜欢WPF,但似乎你可以花几周时间研究不同的绑定表达

 <DataTrigger Binding="{Binding Path=Content, RelativeSource={RelativeSource Mode=Self}}" Value="1">

答案 1 :(得分:0)

也许你可以试试这个:

<ControlTemplate.Triggers>
    <Trigger Property="Content" Value="1">
        <Setter Property="Fill" TargetName="PART_rectangle" Value="Red" />
    </Trigger>
</ControlTemplate.Triggers> 

这样Trigger应绑定到Content的{​​{1}}属性。

答案 2 :(得分:-1)

您应该使用PriorityBinding来实现目标行为