WPF Triggers
in C# with 0 comment
<Window x:Class="WPF触发器测试.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF触发器测试"
        d:DataContext="{d:DesignInstance Type=local:MainWindowViewModel}"
        mc:Ignorable="d"
        TextElement.FontSize="18"
        Title="MainWindow"
        Height="450"
        Width="800">
  <Grid>
    <Grid.Resources>
      <Style TargetType="Border"
             x:Key="bor">
        <Setter Property="Width"
                Value="200" />
        <Setter Property="Height"
                Value="200" />
        <Setter Property="Background"
                Value="#8070D8" />
      </Style>
    </Grid.Resources>
    <Grid.RowDefinitions>
      <RowDefinition Height="auto" />
      <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <TextBlock Text="Triggers Test"
               Margin="0 10"
               HorizontalAlignment="Center"
               FontSize="20" />

    <TabControl Grid.Row="1">
      <TabItem Header="Property Trigger">
        <StackPanel>
          <Border>
            <Border.Style>
              <Style TargetType="Border"
                     BasedOn="{StaticResource bor}">
                <Style.Triggers>
                  <Trigger Property="IsMouseOver"
                           Value="True">
                    <Setter Property="CornerRadius"
                            Value="10" />
                    <Setter Property="Background"
                            Value="#604BD8" />
                  </Trigger>
                </Style.Triggers>
              </Style>
            </Border.Style>
          </Border>
        </StackPanel>
      </TabItem>

      <TabItem Header="Multi Trigger">
        <StackPanel HorizontalAlignment="Center">
          <StackPanel.Resources>
            <Style TargetType="Button">
              <Setter Property="Margin"
                      Value="10" />
              <Setter Property="Background"
                      Value="#086FA1" />
              <Setter Property="Foreground"
                      Value="White" />
              <Setter Property="Template">
                <Setter.Value>
                  <ControlTemplate TargetType="Button">
                    <Border x:Name="bor"
                            Background="{TemplateBinding Background}"
                            BorderThickness="0"
                            Padding="24 8"
                            CornerRadius="5">
                      <ContentPresenter HorizontalAlignment="Center"
                                        VerticalAlignment="Center" />
                    </Border>
                    <ControlTemplate.Triggers>
                      <MultiTrigger>
                        <MultiTrigger.Conditions>
                          <Condition Property="IsEnabled"
                                     Value="False" />
                        </MultiTrigger.Conditions>
                        <Setter  Property="Background"
                                 Value="LightGray" />
                      </MultiTrigger>
                      <!--<Trigger Property="IsMouseOver"
                               Value="True">
                        <Setter Property="Background"
                                Value="#3CA0D0" />
                      </Trigger>
                      <Trigger Property="IsEnabled"
                               Value="False">
                        <Setter Property="Background"
                                Value="LightGray" />
                      </Trigger>-->
                    </ControlTemplate.Triggers>
                  </ControlTemplate>
                </Setter.Value>
              </Setter>
            </Style>
          </StackPanel.Resources>
          <Button Content="正常按钮" />
          <Button Content="禁用按钮"
                  IsEnabled="False" />
        </StackPanel>
      </TabItem>

      <TabItem Header="Data Trigger">
        <StackPanel>
          <TextBlock Margin="20 10"
                     Foreground="Gray">
            <Run Text="当输入的数据是 Error 时 方框变红色" />
            <LineBreak />
            <Run Text="当输入的数据是 OK 时 方框变绿色" />
          </TextBlock>
          <Rectangle>
            <Rectangle.Style>
              <Style TargetType="Rectangle">
                <Setter Property="Width"
                        Value="40" />
                <Setter Property="Height"
                        Value="20" />
                <Setter Property="Fill"
                        Value="#235D79" />
                <Style.Triggers>
                  <DataTrigger Binding="{Binding TestString}"
                               Value="Error">
                    <Setter Property="Fill"
                            Value="Red" />
                  </DataTrigger>
                  <DataTrigger Binding="{Binding TestString}"
                               Value="OK">
                    <Setter Property="Fill"
                            Value="Green" />
                  </DataTrigger>
                </Style.Triggers>
              </Style>
            </Rectangle.Style>
          </Rectangle>
          <TextBlock Text="{Binding TestString,StringFormat=数据值: {0} }"
                     Margin="0 10"
                     HorizontalAlignment="Center" />
          <TextBox Width="240"
                   Text="{Binding TestString, UpdateSourceTrigger=PropertyChanged}" />
        </StackPanel>

      </TabItem>

      <TabItem Header="Event Trigger"
               IsSelected="True">
        <StackPanel HorizontalAlignment="Center">
          <StackPanel.Resources>
            <Style TargetType="Button">
              <Setter Property="Background"
                      Value="#2E16B1" />
              <Setter Property="Foreground"
                      Value="White" />
              <Setter Property="BorderThickness"
                      Value="0" />
              <Setter Property="Padding"
                      Value="0 4" />
            </Style>
          </StackPanel.Resources>
          <TextBlock Text="响应路由事件,通常用于启动动画"
                     Margin="0 10 0 20"
                     Foreground="Gray"
                     HorizontalAlignment="Center" />
          <Button Content="悬停动画"
                  Margin="10">
            <Button.Triggers>
              <EventTrigger RoutedEvent="MouseEnter">
                <BeginStoryboard>
                  <Storyboard RepeatBehavior="Forever">
                    <!-- 透明度 -->
                    <DoubleAnimation Storyboard.TargetProperty="FontSize"
                                     From="16"
                                     To="24"
                                     AutoReverse="True"
                                     Duration="0:0:0.4" />
                  </Storyboard>
                </BeginStoryboard>
              </EventTrigger>

              <EventTrigger RoutedEvent="MouseLeave">
                <BeginStoryboard>
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="FontSize"
                                     From="20"
                                     To="16"
                                     Duration="0:0:0.3" />
                  </Storyboard>
                </BeginStoryboard>
              </EventTrigger>
            </Button.Triggers>
          </Button>
          <Button Content="悬停我">
            <Button.Triggers>
              <EventTrigger RoutedEvent="MouseEnter">
                <BeginStoryboard>
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                     From="1.0"
                                     To="0.5"
                                     Duration="0:0:0.3" />
                  </Storyboard>
                </BeginStoryboard>
              </EventTrigger>

              <EventTrigger RoutedEvent="MouseLeave">
                <BeginStoryboard>
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                     From="0.5"
                                     To="1.0"
                                     Duration="0:0:0.3" />
                  </Storyboard>
                </BeginStoryboard>
              </EventTrigger>
            </Button.Triggers>
          </Button>

        </StackPanel>
      </TabItem>
    </TabControl>
  </Grid>
</Window>