Wpf 多数据触发器不符合所有条件

Wpf 多数据触发器不符合所有条件,wpf,xaml,Wpf,Xaml,我已经创建了一个开关,我不能让MultiDataTrigger满足所有条件 <UserControl.Resources> <Style TargetType="Button" BasedOn="{StaticResource NoDevExpressStyle}"> <Setter Property="Template"> <Setter.Value>

我已经创建了一个开关,我不能让MultiDataTrigger满足所有条件

<UserControl.Resources>
   <Style TargetType="Button" BasedOn="{StaticResource NoDevExpressStyle}">
      <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate>
               <Border Height="30" Width="81" CornerRadius="15" BorderThickness="1" Background="White">
                  <Border.Style>
                     <Style TargetType="Border">
                        <Style.Triggers>

                           <!-- On Not Selected -->
                           <MultiDataTrigger>
                              <MultiDataTrigger.Conditions>
                                 <Condition Binding="{ Binding Path=State}" Value="{x:Static models:ExperimentState.On}" />
                                 <Condition Binding="{Binding SwitchClicked, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}}" Value="False"></Condition>
                              </MultiDataTrigger.Conditions>
                              <Setter Property="BorderBrush" Value="{StaticResource OnInactiveColorBrush}"></Setter>
                           </MultiDataTrigger>

                           <!-- On Selected -->
                           <MultiDataTrigger>
                              <MultiDataTrigger.Conditions>
                                 <Condition Binding="{ Binding Path=State}" Value="{x:Static models:ExperimentState.On}" />
                                 <Condition Binding="{Binding SwitchClicked, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}}" Value="True"></Condition>
                              </MultiDataTrigger.Conditions>

                              <Setter Property="BorderBrush" Value="{StaticResource OnColorBrush}"></Setter>

                           </MultiDataTrigger>

                           <!-- OFF Not Selected -->
                           <MultiDataTrigger>
                              <MultiDataTrigger.Conditions>
                                 <Condition Binding="{ Binding Path=State}" Value="{x:Static models:ExperimentState.Off}" />
                                 <Condition Binding="{Binding Path=SwitchClicked}" Value="False"></Condition>
                              </MultiDataTrigger.Conditions>
                              <Setter Property="BorderBrush" Value="{StaticResource OffInactiveColorBrush}"></Setter>
                           </MultiDataTrigger>

                           <!-- Off and selected -->
                           <MultiDataTrigger>
                              <MultiDataTrigger.Conditions>
                                 <Condition Binding="{ Binding Path=State}" Value="{x:Static models:ExperimentState.Off}" />
                                 <Condition Binding="{Binding Path=SwitchClicked}" Value="True"></Condition>
                              </MultiDataTrigger.Conditions>

                              <Setter Property="BorderBrush" Value="{StaticResource OffColorBrush}"></Setter>
                           </MultiDataTrigger>
                        </Style.Triggers>
                     </Style>
                  </Border.Style>
               </Border>
               <ControlTemplate.Triggers>
                  <Trigger Property="IsMouseOver" Value="True">
                     <Setter Property="Cursor" Value="Hand"></Setter>
                  </Trigger>
               </ControlTemplate.Triggers>
            </ControlTemplate>
         </Setter.Value>
      </Setter>
   </Style>
</UserControl.Resources>

<Button x:Name="Button" Click="ButtonBase_OnClick" />
有人能告诉我如何确保我所有的条件都得到满足吗

我已尝试将relitive source绑定到self和user控件,但是SwitchClicked属性在codebehind中,并且没有ViewModel。

您必须在视图模型中实现,或者我认为您的代码behind中实现,否则设置属性将不会通知您 正在更改,并且触发器中的绑定将不会更新

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{
   PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

这就是问题所在,我不敢相信我没有看到!再次感谢你!
public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{
   PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public bool SwitchClicked
{
   get => _switchClicked;
   set
   {
      if (_switchClicked != value)
      {
         _switchClicked = value;
         OnPropertyChanged(nameof(SwitchClicked));
      }
   }
}