Les déclencheurs WPF sont destinés à provoquer des changements visuels. Les objets Setter dans les déclencheurs provoquent des changements de propriété sur le contrôle.
Si vous voulez répondre à un événement (comme un EventTrigger), vous pouvez toujours simplement vous abonner à l'événement en code, puis définir la propriété data dans le gestionnaire.
Vous pouvez utiliser MouseEnter et MouseLeave de cette manière. Par exemple:
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;
}
Certaines propriétés sur un contrôle que vous pourriez lier la propriété de l'objet de données, comme ceci:
Binding myBind = new Binding("IsHilited");
myBind.Source = listBox.DataContext;
listBox.SetBinding(listBox.IsEnabled, myBind);
Vous ne pouvez pas utiliser IsMouseOver dans une liaison cependant,.
Si vous créez un contrôle personnalisé, vous pouvez disposer d'une plus grande flexibilité pour créer une liaison de ce type dans le contrôle. Vous pouvez créer une propriété de dépendance personnalisée et la synchroniser avec la propriété data du gestionnaire DependencyPropertyChanged. Vous pouvez ensuite définir cette propriété de dépendance avec un déclencheur WPF.
Voici un exemple:
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>
J'ai ajouté un exemple de code à ma réponse - cela fonctionne-t-il pour vous? – Andy
Oui, cela fonctionne. Merci! –