Триггеры WPF предназначены для создания визуальных изменений. Установочные объекты внутри триггеров вызывают изменения свойств в элементе управления.
Если вы хотите ответить на событие (например, EventTrigger), вы всегда можете просто подписаться на событие в коде и затем установить свойство data в обработчике.
Таким способом вы можете использовать MouseEnter и MouseLeave. Например:
listBox.MouseEnter += listBox_MouseEnter;
listBox.MouseLeave += listBox_MouseLeave;
void listBox_MouseEnter(object sender, MouseEventArgs e)
{
listBox.MyClass.IsHilited = true;
}
void listBox_MouseLeave(object sender, MouseEventArgs e)
{
listBox.MyClass.IsHilited = false;
}
Некоторые свойства элемента управления, к которым можно привязать свойство объекта данных, например:
Binding myBind = new Binding("IsHilited");
myBind.Source = listBox.DataContext;
listBox.SetBinding(listBox.IsEnabled, myBind);
Однако нельзя использовать IsMouseOver в привязке.
Если вы создаете пользовательский элемент управления, вы можете иметь еще большую гибкость для встраивания подобной привязки в элемент управления. Вы можете создать собственное свойство зависимости и синхронизировать его со свойством данных в обработчике DependencyPropertyChanged. Затем вы можете установить это свойство зависимости с помощью триггера WPF.
Вот пример:
public static readonly DependencyProperty IsHilitedProperty =
DependencyProperty.Register("IsHilited", typeof(bool), typeof(CustomListBox),
new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnIsHilitedChanged)));
public double IsHilited
{
get
{
return (bool)GetValue(IsHilitedProperty);
}
set
{
SetValue(IsHilitedProperty, value);
}
}
private static void OnIsHilitedChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
CustomListBox box = obj as CustomListBox;
if (box != null)
box.MyClass.IsHilited = box.IsHilited;
// Or:
// Class myClass = box.DataContext as Class;
// myClass.IsHilited = box.isHilited;
}
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="IsHilited" Value="True"/>
</Trigger>