WPF觸發器旨在引起視覺變化。觸發器中的Setter對象會導致控件上的屬性更改。
如果你想響應一個事件(比如EventTrigger),你總是可以簡單地在代碼中訂閱事件,然後在處理程序中設置數據屬性。
你可以用這種方式使用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>
我在示例代碼中添加了示例代碼 - 是否適合您? – Andy 2009-02-11 15:37:02
是的,它的工作原理。謝謝! – 2009-02-11 16:33:28