WPF五種觸發器

WPF中定義了五個觸發器類:Trigger、MultiTrigger、DataTrigger、multiDataTrigger、EventTrigger。下面我來介紹一下怎麼使用這幾個觸發器的使用方法。

Trriger(單一條件的觸發器):

<Page x:Class="StyleTest.Trigger"
      xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="
http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:d="
http://schemas.microsoft.com/expression/blend/2008"
      mc:Ignorable="d"
      d:DesignHeight="300" d:DesignWidth="300"
   Title="Trigger">
    <Page.Resources>
        <Style x:Key="smallText">
            <Setter Property="Control.Foreground" Value="blue"/>
            <Setter Property="Control.FontSize" Value="20"/>
            <Setter Property="Control.FontFamily" Value="Times new Roman"/>
            <Setter Property="Control.FontWeight" Value="Bold"/>
            <Style.Triggers>                                                           <!--這裏使用了觸發器,當鼠標移過控件的時候,控件的風格發生改變-->
                <Trigger Property="Control.IsMouseOver" Value="True">
                    <Setter Property="Control.Foreground" Value="red"/>
                    <Setter Property="Control.FontSize" Value="24"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Page.Resources>
    <StackPanel>
        <TextBlock Style="{StaticResource smallText}">旅望因高盡</TextBlock>
        <TextBlock Style="{StaticResource smallText}">鄉心遇物悲</TextBlock>
        <TextBlock Style="{StaticResource smallText}">故林歸宿處</TextBlock>
        <TextBlock Style="{StaticResource smallText}">一葉下梧桐</TextBlock>
        <Button Style="{StaticResource smallText}">旅思</Button>
    </StackPanel>
</Page>

MultiTrigger(多條件的觸發器):

<Page x:Class="StyleTest.Multitrigger"
      xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="
http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:d="
http://schemas.microsoft.com/expression/blend/2008"
      mc:Ignorable="d"
      d:DesignHeight="300" d:DesignWidth="300"
 Title="Multitrigger">
    <Page.Resources>
        <Style x:Key="smallText">
            <Setter Property="Control.Foreground" Value="blue"/>
            <Setter Property="Control.FontSize" Value="20"/>
            <Setter Property="Control.FontFamily" Value="Times New Roman"/>
            <Setter Property="Control.FontWeight" Value="Bold"/>
            <Style.Triggers>
                <Trigger Property="Control.IsMouseOver" Value="True">
                    <Setter Property="Control.Foreground" Value="red"/>
                </Trigger>
                <MultiTrigger>                                      <!--定義觸發器-->
                    <MultiTrigger.Conditions>
                        <Condition Property="Control.IsMouseOver" Value="True"/>     <!--通過Condition定義觸發條件-->
                        <Condition Property="Button.IsPressed" Value="True"/>           <!--通過Condition定義觸發條件-->
                    </MultiTrigger.Conditions>
                    <Setter Property="Control.Foreground" Value="gray"/>
                    <Setter Property="Control.FontStyle" Value="Italic"/>
                </MultiTrigger>
            </Style.Triggers>
        </Style>
    </Page.Resources>
    <StackPanel>
        <Button Style="{StaticResource smallText}">牀前明月光</Button>
        <Button Style="{StaticResource smallText}">疑是地上霜</Button>
        <Button Style="{StaticResource smallText}">舉頭望明月</Button>
        <Button Style="{StaticResource smallText}">低頭思故鄉</Button>
    </StackPanel>
</Page>

DataTrigger(數據觸發器):DataTrigger和MultiDataTriffer這一對觸發器和Trigger和MultiTrigger非常類似。但是DataTrigger多了一個Binding屬性,其語法如下:

<DataTrigger Binding="{Binding ElementName=控件名,path=空間中的相應屬性}" value="相關屬性的值">

如:

<Page x:Class="StyleTest.DataTrigger"
      xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="
http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:d="
http://schemas.microsoft.com/expression/blend/2008"
      mc:Ignorable="d"
      d:DesignHeight="300" d:DesignWidth="300"
 Title="DataTrigger">
    <Page.Resources>
        <Style x:Key="smallText">
            <Setter Property="Control.Foreground" Value="Black"/>
            <Setter Property="Control.FontSize" Value="24"/>
            <Setter Property=" Control.FontFamily" Value="Times New Roman"/>
            <Setter Property="Control.FontWeight" Value="Regular"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=italicFont, Path=IsChecked}" Value="True">   <!--這裏綁定控件的名稱,及控件屬性-->
                    <Setter Property=" Control.FontStyle" Value="Italic"/> <!--當該控件觸發該事件的時候,則所有控件的字體樣式變爲斜體-->
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=boldFont, Path=IsChecked}" Value="True">
                    <Setter Property="Control.FontStyle" Value="Normal"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=redFont, Path=IsChecked}" Value="True">
                    <Setter Property=" Control.Foreground" Value="Red"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=blueFont, Path=IsChecked}" Value="True">
                    <Setter Property="Control.Foreground" Value="Blue"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=btnBold, Path=IsPressed}" Value=" True">
                    <Setter Property="Control.FontSize" Value="12"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>   
    </Page.Resources>
    <StackPanel>
        <GroupBox>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <RadioButton Name="italicFont" Grid.Row="0" Grid.Column="0">斜體</RadioButton>
                <RadioButton Name="boldFont" Grid.Row="0" Grid.Column="1">正常</RadioButton>
                <RadioButton Name="redFont" Grid.Row="1" Grid.Column="0">紅色</RadioButton>
                <RadioButton Name="blueFont" Grid.Row="1" Grid.Column="1">藍色</RadioButton>
            </Grid>
        </GroupBox>
        <TextBlock Style="{StaticResource smallText}">牀前明月光</TextBlock>
        <TextBlock Style="{StaticResource smallText}">疑是地上霜</TextBlock>
        <TextBlock Style="{StaticResource smallText}">舉頭望明月</TextBlock>
        <TextBlock Style="{StaticResource smallText}">低頭思故鄉</TextBlock>
        <Button x:Name="btnBold" Style="{StaticResource smallText}">粗體</Button>
    </StackPanel>
</Page>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章