✍ WPF Trigger 란?
- 트리거는 어떤 조건, 이벤트 등이 주어졌을 때 묵시적으로 컨트롤의 상태 또는 이벤트 핸들러 등을 호출하는 기능을 의미한다.
- 즉, 트리거를 사용하면 엘리먼트의 프로퍼티나 데이터 바인딩, 이벤트에서 발생하는 변화에 엘리먼트와 컨트롤이 어떻게 반응할지를 정할 수 있다.
- Style의 Setter와 비교할 때 둘 다 프로퍼티를 설정하지만, Setter는 엘리먼트가 처음 생성되었을 때의 프로퍼티를 설정하며, 트리거는 프로퍼티가 변경되는 경우에 프로퍼티를 설정하는 점이 다르다.
✍ 프로퍼티 트리거
- TriggerBase 중 가장 일반적인 파생클래스는 특정 프로퍼티의 변화(어떤 값을 가졌을 때)에 내부에 정의한 Setter 컬렉션이 실행되는 트리거이다.
- 컨트롤이나 엘리먼트가 반응하는 방법을 정의하는 트리거인데 대부분 이 프로퍼티는 IsMouseOver 프로퍼티와 같은 사용자의 입력 프로퍼티를 포함한다. 이때 트리거는 Setter에서 정의된 프로퍼티를 변경한다.
- 트리거의 프로퍼티가 bool로 제한되는 것은 아니지만 흔히 사용된다. 이 프로퍼티는 반드시 의존 프로퍼티에 의해 지원되어야 한다. (IsMouseOver, IsFocused, IsPressed 등)
- Style과 같이 Triggers는 Setters라는 이름의 프로퍼티를 가지고 있으며, 이 프로퍼티 트리거의 Content Property로 트리거는 하나 이상의 Setter 엘리먼트를 포함할 수 있다.
<Window x:Class="HelloWorld1.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:HelloWorld1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<TextBlock Name="tblk1"
Text="Hello, WPF World!"
FontSize="30"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Green"></Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<!-- IsMouseOver가 True일 때 트리거가 실행된다 --!>
<Setter Property="Foreground" Value="Red"></Setter>
<Setter Property="TextDecorations" Value="Underline"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
</Window>
1. TextBlock을 만든다.
2. TextBlock 안에 Style 태그를 만든다.
3. Style 태그 안에 트리거를 만든다.
즉, 프로퍼티 트리거란 Property의 상태가 ~~가 되었을 때 프로퍼티를 변경해 주세요! 라고 하는 것이다.
<Window x:Class="HelloWorld1.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:HelloWorld1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style x:Key="MyStyle">
<Setter Property="Control.Foreground" Value="Red"/>
<Setter Property="TextBlock.Text" Value="Hello, WPF!"/>
<Style.Triggers>
<Trigger Property="Control.IsMouseOver" Value="True">
<Setter Property="Control.Foreground" Value="Blue"/>
<Setter Property="TextBlock.Text" Value="버튼으로 진입했습니다."/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<Button Width="100"
Height="70"
Style="{StaticResource MyStyle}" Content="Trigger"/>
<TextBlock Style="{StaticResource MyStyle}"
FontSize="30"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</StackPanel>
</Window>
버튼에 마우스를 올리면 버튼의 프로퍼티(전경색) 변경
TextBlock에 마우스를 올리면 텍스트의 프로퍼티(폰트컬러)가 변경
'C# > WPF' 카테고리의 다른 글
[WPF] ListBox와 LINQ쿼리 (0) | 2023.08.05 |
---|---|
[WPF] Data Trigger(데이터 트리거) (0) | 2023.08.05 |
[WPF] StaticResource (0) | 2023.08.04 |
[WPF] Data Template, Selector (0) | 2023.08.03 |
[WPF] EVENT(BUBBLING, TUNNULING) (0) | 2023.08.03 |