TOC

This article has been localized into Russian by the community.

Стили:

WPF MultiTrigger и MultiDataTrigger

В предыдущем разделе, мы работали с Триггерами для динамического изменения стилей. До сих пор, они основывались на одном свойстве, но WPF так же поддерживает Мультитриггеры, которые могут следить за двумя и более условиями, при удовлетворении которых - срабатывают.

Существует два типа Мультитриггеров: MultiTrigger, работающий как стандартный Триггер,на основе свойств зависимостей и MultiDataTrigger, который функционирует путем связывания с каким-либо свойством. Давайте начнем с быстрого примера использования Мультитриггера.

Мультитриггер

<Window x:Class="WpfTutorialSamples.Styles.StyleMultiTriggerSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="StyleMultiTriggerSample" Height="100" Width="250">
    <Grid>
        <TextBox VerticalAlignment="Center" HorizontalAlignment="Center" Text="Hover and focus here" Width="150">
            <TextBox.Style>
                <Style TargetType="TextBox">
                    <Style.Triggers>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsKeyboardFocused" Value="True" />
                                <Condition Property="IsMouseOver" Value="True" />
                            </MultiTrigger.Conditions>
                            <MultiTrigger.Setters>
                                <Setter Property="Background" Value="LightGreen" />
                            </MultiTrigger.Setters>
                        </MultiTrigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>
    </Grid>
</Window>

В этом примере, мы использовали Триггер для изменения цвета фона TextBox, при одновременном фокусе клавиатуры И наведенного курсора мыши на него (как видно на скриншоте). Этот Триггер имеет два условных выражения, но мы с легкостью можем добавить столько, сколько необходимо. В секции Setters, мы определяем свойства, которые хотим изменить при удовлетворении условиям в Триггере - в данном примере только одно (цвет фона).

Мультитриггер данных

Так же как и обычный Триггер данных, Мультитриггер данных достаточно крут, так как использует связывание для слежения за свойствами. Это значит, что Вы можете можете использовать превосходные механизмы связывания в WPF, в том числе, связывание со свойством другого элемента управления и т.д. Давайте я покажу Вам, насколько это просто:

<Window x:Class="WpfTutorialSamples.Styles.StyleMultiDataTriggerSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="StyleMultiDataTriggerSample" Height="150" Width="200">
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
        <CheckBox Name="cbSampleYes" Content="Yes" />
        <CheckBox Name="cbSampleSure" Content="I'm sure" />
        <TextBlock HorizontalAlignment="Center" Margin="0,20,0,0" FontSize="28">
            <TextBlock.Style>
                <Style TargetType="TextBlock">
                    <Setter Property="Text" Value="Unverified" />
                    <Setter Property="Foreground" Value="Red" />
                    <Style.Triggers>
                        <MultiDataTrigger>
                            <MultiDataTrigger.Conditions>
                                <Condition Binding="{Binding ElementName=cbSampleYes, Path=IsChecked}" Value="True" />
                                <Condition Binding="{Binding ElementName=cbSampleSure, Path=IsChecked}" Value="True" />
                            </MultiDataTrigger.Conditions>
                            <Setter Property="Text" Value="Verified" />
                            <Setter Property="Foreground" Value="Green" />
                        </MultiDataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
    </StackPanel>
</Window>

Здесь, я переделал пример, в котором мы использовали обычный Триггер данных, функционирующий на одном свойстве. Я реализовал свзязывание того же свойства (IsChecked), только с двумя разными элементами. Это позволило нам менять цвет в случае, когда оба CheckBox нажаты, и, если Вы убераете хотя бы один флажок - применится стиль по умолчанию.

Итог

Как Вы можете наблюдать, Мультитриггеры такие же простые в использовании, как и обычные Триггеры. Они могут быть крайне полезными, особенно в случае создания собственных элементов управления.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!