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>