В WPF триггер свойства

Я довольно новичок в WPF, и в настоящее время я работаю с triggers. У меня есть вопрос относительно простой триггер. By простой триггер, я имею в виду тот, который наблюдает за изменением dependency property и использует setter изменить стиль.

пример:

<Style.Triggers>
    <Trigger Property="Control.IsFocused" Value ="True">
        <Setter Property=" Control.Foreground" Value =" DarkRed" />
    </Trigger>
</Style.Triggers>

все примеры, которые я видел, использовали следующие trigger properties:

  • <Trigger Property="Control.IsFocused" Value ="True">
  • <Trigger Property="Control.IsMouseOver" Value ="True">
  • <Trigger Property="Button.IsPressed" Value ="True">

вопрос: Это только триггер свойства в наличии? Если нет, то какие другие существуют?

Я искал в интернете, но безрезультатно. Может, кто-нибудь прольет свет на это.

3 ответов


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

по правде говоря, вы можете иметь свой Trigger смотреть DependencyProperty, но потому что он "срабатывает" при изменении значения (и соответствует Value вы говорите ему следить за), имеет смысл использовать только свойства, которые будут меняться во время выполнения, часто от действия пользователя (например, фокус, мышь, нажата и т. д.). Только некоторых DependencyProperties фактическое значение изменения в этих обстоятельствах, поэтому не все из них имеют смысл использовать в Triggers.

Microsoft добавила несколько DependencyProperties к стандартным элементам управления, чтобы вы могли легко создавать триггеры на основе изменений. Однако вы также можете создавать свои собственные элементы управления своими DependencyProperties и есть триггеры, которые отвечают, когда ваш пользовательский DependencyProperties изменить.

имейте в виду, PropertyTriggers только один сорт Trigger в WPF. Есть также EventTriggers и DataTriggers и MultiTriggers. Эти другие триггеры срабатывают на основе событий или изменений данных или в случае MultiTriggers несколько значений свойств (или данных).

есть ли что-то конкретное, что вы пытаетесь сделать с Triggers? этот и другие ответы обеспечивает хорошее объяснение того, что делает каждый тип триггера.


в WPF есть несколько типов триггеров, но два наиболее часто используемых являются регулярными Triggers и DataTriggers

оба типа триггеров будут наблюдать значение, и когда оно изменится, чтобы соответствовать указанному Value потом применить сеттеры стиля.

обычные триггеры может использоваться для любого свойства зависимостей объекта. Это включает в себя такие свойства, как Text, Visibility, Background, etc в дополнение к более обыкновенно вызванным свойствам что вы указали: IsFocused, IsMouseOver и IsPressed.

обратите внимание, что в соответствии с страница MSDN о триггере.Собственность, вам не нужно указывать префикс имени класса, если стиль или шаблон, содержащий триггер имеет TargetType свойства set

простой способ запомнить это, если вы можете связать свойство, вы можете установить триггер на нем.

DataTriggers являются триггерами, которые смотрят привязанное значение вместо зависимости Свойство. Они позволяют наблюдать за связанным выражением и будут реагировать, когда эта привязка будет равна вашему значению.

например, вы можете установить DataTrigger on "{Binding Value}" или "{Binding ElementName=MyTextBox, Path=IsChecked}". Вы даже можете использовать Converters С DataTriggers, такие как

<DataTrigger
    Binding="{Binding SomeInt, Converter={StaticResource IsGreaterThanZero}}"
    Value="True">

используйте этот код для лучшего опыта работы с триггером в wpf.

<Window x:Class="DataBinding.Trigger2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Trigger2" Height="500" Width="500">
<Window.Resources>
    <Style TargetType="Button">
        <Style.Setters>
            <Setter Property="FontFamily" Value="Tahoma"></Setter>
            <Setter Property="FontSize" Value="15"></Setter>
            <Setter Property="FontWeight" Value="Bold"></Setter>
            <Setter Property="Height" Value="25"></Setter>
            <Setter Property="Width" Value="100"></Setter>

        </Style.Setters>
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Background" Value="Purple"></Setter>
                <Setter Property="Foreground" Value="DarkCyan"></Setter>
                <Setter Property="FontFamily" Value="Franklin Gothic"></Setter>
                <Setter Property="FontSize" Value="10"></Setter>
                <Setter Property="FontWeight" Value="Normal"></Setter>
                <Setter Property="Height" Value="50"></Setter>
                <Setter Property="Width" Value="200"></Setter>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Red"></Setter>
                <Setter Property="Foreground" Value="White"></Setter>
                <Setter Property="FontFamily" Value="Calibri"></Setter>
                <Setter Property="FontSize" Value="25"></Setter>
                <Setter Property="FontWeight" Value="Heavy"></Setter>
                <Setter Property="Height" Value="100"></Setter>
                <Setter Property="Width" Value="400"></Setter>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" Value="Green"></Setter>
                <Setter Property="Foreground" Value="Violet"></Setter>
                <Setter Property="FontFamily" Value="Times New Roman"></Setter>
                <Setter Property="FontSize" Value="20"></Setter>
                <Setter Property="FontWeight" Value="Thin"></Setter>
                <Setter Property="Height" Value="250"></Setter>
                <Setter Property="Width" Value="250"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<Button>It's a Magic.</Button>