Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 属性和数据值为true时触发WPF_C#_Wpf_Triggers_Datatrigger_Multidatatrigger - Fatal编程技术网

C# 属性和数据值为true时触发WPF

C# 属性和数据值为true时触发WPF,c#,wpf,triggers,datatrigger,multidatatrigger,C#,Wpf,Triggers,Datatrigger,Multidatatrigger,当属性和数据值为true时,我需要能够更改控件的样式。例如,我的绑定数据有一个IsDirty属性。当IsDirty为真且选中控件时,我想更改控件的背景色。我找到了MultiTrigger和MultiDataTrigger类……但在这种情况下,我需要以某种方式触发数据和属性。我该怎么做 另一个注意事项:我需要能够在代码隐藏而不是XAML中实现这一点。MultiDataTrigger对DependencyProperties的作用与对普通属性的作用一样好。只需将绑定中的路径设置为依赖项属性的名称 但

当属性和数据值为true时,我需要能够更改控件的
样式。例如,我的绑定数据有一个
IsDirty
属性。当
IsDirty
为真且选中控件时,我想更改控件的背景色。我找到了
MultiTrigger
MultiDataTrigger
类……但在这种情况下,我需要以某种方式触发数据和属性。我该怎么做


另一个注意事项:我需要能够在代码隐藏而不是XAML中实现这一点。

MultiDataTrigger对DependencyProperties的作用与对普通属性的作用一样好。只需将绑定中的路径设置为依赖项属性的名称

但是,在设置绑定的源时需要小心,因为默认情况下,源是触发器所附加到的元素的DataContext。如果触发器在可选对象的样式中使用,则可以使用绑定的RelativeSource属性:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
      <Condition Binding="{Binding Path=IsDirty}" Value="True" />
      <Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Self}}" Value="True" />
    </MultiDataTrigger.Conditions>
    <Setter Property="Background" Value="Cyan" />
  </MultiDataTrigger>

以下是我在代码隐藏中的实际操作方式:

new MultiDataTrigger
{
    Conditions = 
    {
        new Condition
        {
            Binding = new Binding("IsDirty"),
            Value = true
        },
        new Condition
        {                                                    
            Binding = new Binding("IsSelected") { RelativeSource = RelativeSource.Self },
            Value = true
        }
    },

    Setters =
    {
        new Setter
        {
            Property = Control.BackgroundProperty,
            Value = Brushes.Pink
        }
    }
}

你能举个例子吗?对不起,我是WPF的新手。实际上,我需要为我的特殊情况在代码隐藏中执行此操作。我唯一搞不清楚的是如何指定相对资源Self。你知道怎么做吗?弄明白了,把你的答案标记为正确,然后我会发布我在相同情况下为其他人使用的代码隐藏版本。