Xaml WPF中多数据触发器的UWP等效

Xaml WPF中多数据触发器的UWP等效,xaml,uwp,Xaml,Uwp,我希望我的按钮仅在选中两个复选框时启用。但是这个代码不起作用。按钮始终处于启用状态。 我认为WPF中的MultiDataTrigger可以做到这一点,但在UWP中我没有MultiDataTrigger <CheckBox x:Name="Condition1"> <CheckBox x:Name="Condition2"> <Button x:Name="LoginBtn" Click="LoginBtn_Click" Content="Login">

我希望我的按钮仅在选中两个复选框时启用。但是这个代码不起作用。按钮始终处于启用状态。
我认为WPF中的
MultiDataTrigger
可以做到这一点,但在UWP中我没有
MultiDataTrigger

<CheckBox x:Name="Condition1">
<CheckBox x:Name="Condition2">

<Button x:Name="LoginBtn" Click="LoginBtn_Click" Content="Login">
    <Interactivity:Interaction.Behaviors>
        <Core:DataTriggerBehavior Binding="{Binding ElementName=Condition1, Path=IsChecked}" Value="False">
            <Core:ChangePropertyAction TargetObject="{Binding LoginBtn}" PropertyName="IsEnabled" Value="False"/>
        </Core:DataTriggerBehavior>
        <Core:DataTriggerBehavior Binding="{Binding ElementName=Condition2, Path=IsChecked}" Value="False">
            <Core:ChangePropertyAction TargetObject="{Binding LoginBtn}" PropertyName="IsEnabled" Value="False"/>
        </Core:DataTriggerBehavior>
        <Core:DataTriggerBehavior Binding="{Binding ElementName=LoginBtn, Path=IsEnabled}" Value="False">
            <Core:ChangePropertyAction PropertyName="Background" Value="Gray"/>
        </Core:DataTriggerBehavior>
    </Interactivity:Interaction.Behaviors>
</Button>

问题在于
DataTriggerBehavior
与WPF中的
DataTrigger
不同,如果不满足条件,它不会将目标属性还原为默认值

因此,我终于找到了一种编程方式的演练

private bool? condition1
{
    get { return Condition1.IsChecked; }
    set
    {
        Condition1.IsChecked = value;
        if ((value ?? false) && (condition2 ?? false)) LoginBtn.IsEnabled = true;
        else LoginBtn.IsEnabled = false;
    }
}
private bool? condition2
{
    get { return Condition2.IsChecked; }
    set
    {
        Condition2.IsChecked = value;
        if ((value ?? false) && (condition1 ?? false)) LoginBtn.IsEnabled = true;
        else LoginBtn.IsEnabled = false;
    }
}
XAML:


对于按钮颜色

<Core:DataTriggerBehavior Binding="{Binding ElementName=LoginBtn, Path=IsEnabled}" Value="False">
    <Core:ChangePropertyAction PropertyName="Background" Value="Gray"/>
</Core:DataTriggerBehavior>
<Core:DataTriggerBehavior Binding="{Binding ElementName=LoginBtn, Path=IsEnabled}" Value="True">
    <Core:ChangePropertyAction PropertyName="Background" Value="White"/>
</Core:DataTriggerBehavior>

同时设置按钮默认值
IsEnable=False

我认为这可以通过vsm中的CompositeStateTrigger实现。

期待更好的解决方案

如果您使用的是MVVM,则可以使用CanExecute启用和禁用该按钮

<Core:DataTriggerBehavior Binding="{Binding ElementName=LoginBtn, Path=IsEnabled}" Value="False">
    <Core:ChangePropertyAction PropertyName="Background" Value="Gray"/>
</Core:DataTriggerBehavior>
<Core:DataTriggerBehavior Binding="{Binding ElementName=LoginBtn, Path=IsEnabled}" Value="True">
    <Core:ChangePropertyAction PropertyName="Background" Value="White"/>
</Core:DataTriggerBehavior>