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>