Wpf datatrigger无法设置绑定属性

Wpf datatrigger无法设置绑定属性,wpf,xaml,binding,triggers,Wpf,Xaml,Binding,Triggers,我有两个复选框(chkMfsUi和chkMfs)。当我检查chkMfsUi时,我还想检查chkMfs(并禁用它) 我用datatrigger试过: <Style x:Key="MfsCheckBoxStyle" TargetType="CheckBox"> <Setter Property="IsEnabled" Value="True" /> <Setter Property="IsChecked"

我有两个复选框(chkMfsUi和chkMfs)。当我检查chkMfsUi时,我还想检查chkMfs(并禁用它)

我用datatrigger试过:

        <Style x:Key="MfsCheckBoxStyle" TargetType="CheckBox">
            <Setter Property="IsEnabled" Value="True" />
            <Setter Property="IsChecked" Value="False" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked, ElementName=chkMfsUi}" Value="True">
                    <Setter Property="IsEnabled" Value="False" />
                    <Setter Property="IsChecked" Value="True" />
                </DataTrigger>
            </Style.Triggers>
        </Style>

这些是我的复选框:

<StackPanel>
    <CheckBox Name="chkMfsUi"
                Checked="CheckBox_Checked"
                Content="MFS - UI"
                IsChecked="{Binding MfsUi}"
                Unchecked="CheckBox_Checked" />
    <CheckBox Content="MFS" IsChecked="{Binding Mfs}" Style="{StaticResource MfsCheckBoxStyle}" />
</StackPanel>

IsEnabled属性工作正常,但IsChecked属性不工作。也许是因为它被束缚了?我还使用inotifyproperty更改这些属性

如果我在代码隐藏中设置它,它会工作,但是使用触发器可以吗

问候,

阿尔芬斯

编辑:

从目前的回答来看,我的问题似乎不完整。我需要有以下三种状态:


最后但并非最不重要的一点:两个复选框的IsChecked属性都必须绑定!(这是出现故障的时刻)

在这种情况下,您可以使用:

表示应用一组操作以响应事件的触发器

例如:

<StackPanel>
    <StackPanel.Triggers>
        <EventTrigger RoutedEvent="CheckBox.Checked" SourceName="First">
            <BeginStoryboard>
                <Storyboard>
                    <BooleanAnimationUsingKeyFrames Storyboard.TargetName="Second"
                                                    Storyboard.TargetProperty="IsChecked">

                        <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="True" />
                    </BooleanAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>

        <EventTrigger RoutedEvent="CheckBox.Checked" SourceName="Second">
            <BeginStoryboard>
                <Storyboard>
                    <BooleanAnimationUsingKeyFrames Storyboard.TargetName="First"
                                                    Storyboard.TargetProperty="IsChecked">

                        <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="True" />
                    </BooleanAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>

        <EventTrigger RoutedEvent="CheckBox.Unchecked" SourceName="First">
            <BeginStoryboard>
                <Storyboard>
                    <BooleanAnimationUsingKeyFrames Storyboard.TargetName="Second"
                                                    Storyboard.TargetProperty="IsChecked">

                        <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False" />
                    </BooleanAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>

        <EventTrigger RoutedEvent="CheckBox.Unchecked" SourceName="Second">
            <BeginStoryboard>
                <Storyboard>
                    <BooleanAnimationUsingKeyFrames Storyboard.TargetName="First"
                                                    Storyboard.TargetProperty="IsChecked">

                        <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False" />
                    </BooleanAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </StackPanel.Triggers>

    <CheckBox Name="First"
              Content="First" />

    <CheckBox Name="Second" 
              Content="Second" />
</StackPanel>
然后像这样使用:

<EventTrigger RoutedEvent="CheckBox.Checked" SourceName="First">
    <BeginStoryboard Storyboard="{StaticResource FirstCheckedStory}" />
</EventTrigger>
试试这个

  <StackPanel Grid.Column="1">
        <CheckBox x:Name="chkMfsUi" IsChecked="True"></CheckBox>
        <CheckBox x:Name="chkMfs" IsChecked="{Binding ElementName=chkMfsUi,Path=IsChecked}">
            <CheckBox.Style>
                <Style TargetType="CheckBox">
                    <Style.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="IsEnabled" Value="False"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </CheckBox.Style>
        </CheckBox>

另一种方法:使用资源中的样式

首先添加此命名空间xmlns:Globalvaribale=“clr namespace:System;assembly=mscorlib”


chkMfsUi

输出


谢谢你的回答Heena,当我单击第二个复选框时,你的第一个方法的反应不是我想要的,但是你的第二个方法会!所以你的第二种方法是正确的答案!谢谢。@ffonz非常欢迎你。你检查过第二种方法(使用样式)了吗。第二种方法可能适用于你的情况。嗨,Heena,对不起。我的反应太快了。我注意到你的答案太简单了。两个复选框都已选中,但属性未绑定!当麻烦出现时…@ffonz没关系,但它应该约束属性。
<Storyboard>
    <BooleanAnimationUsingKeyFrames ... />
    <BooleanAnimationUsingKeyFrames ... />
</Storyboard>    
  <StackPanel Grid.Column="1">
        <CheckBox x:Name="chkMfsUi" IsChecked="True"></CheckBox>
        <CheckBox x:Name="chkMfs" IsChecked="{Binding ElementName=chkMfsUi,Path=IsChecked}">
            <CheckBox.Style>
                <Style TargetType="CheckBox">
                    <Style.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="IsEnabled" Value="False"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </CheckBox.Style>
        </CheckBox>
<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        
    xmlns:Globalvaribale="clr-namespace:System;assembly=mscorlib">

<Window.Resources>
    <Globalvaribale:String x:Key="chkMfsUi">chkMfsUi</Globalvaribale:String>
    <Style x:Key="chkMfsstyle" TargetType="CheckBox">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsChecked,ElementName={StaticResource chkMfsUi}}" Value="True">
                <Setter Property="IsEnabled" Value="False"/>
                <Setter Property="IsChecked" Value="True"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<StackPanel Grid.Column="1">
    <CheckBox x:Name="chkMfsUi"></CheckBox>
    <CheckBox Style="{StaticResource chkMfsstyle}"/>
</StackPanel>