В 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>