如何通过编程设置属性来使触发器工作?
问题描述:
我想设置控件的背景颜色,只需按住鼠标左键,然后我希望此控件返回到其正常行为(触发MouseOver等)。但是当我在代码隐藏中重写属性时,触发器将停止工作。如何解决它?我尝试在MouseUp事件中将属性设置为null,但它无法工作。如何通过编程设置属性来使触发器工作?
代码:
private void Item_OnMouseDown(object sender, MouseButtonEventArgs e)
{
var item = sender as ListBoxItem;
item.Background = Application.Current.Resources["BlueLightBrush"];
}
设置Background
这种方式之后,它保持对下一次我将它(没有任何更改将通过触发器来实现)
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource BlueDarkBrush}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource BlueDarkBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource BlueDarkBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
答
我设法同做我想通过附加属性:
public static class ListBoxItemAttachedProperties
{
public static bool GetIsMouseDown(DependencyObject obj)
{
return (bool)obj.GetValue(IsMouseDownProperty);
}
public static void SetIsMouseDown(DependencyObject obj, bool value)
{
obj.SetValue(IsMouseDownProperty, value);
}
public static readonly DependencyProperty IsMouseDownProperty =
DependencyProperty.RegisterAttached("IsMouseDown", typeof(bool), typeof(UIElementAttachedProperties), new PropertyMetadata(false));
}
code-behind:
private void Item_OnMouseDown(object sender, MouseButtonEventArgs e)
{
var listBoxItem = sender as ListBoxItem;
listBoxItem.SetValue(ListBoxItemAttachedProperties.IsMouseDownProperty, true);
}
private void Item_OnMouseUp(object sender, MouseButtonEventArgs e)
{
var listBoxItem = sender as ListBoxItem;
listBoxItem.SetValue(ListBoxItemAttachedProperties.IsMouseDownProperty, false);
}
XAML:
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource BlueDarkBrush}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource BlueDarkBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource BlueDarkBrush}"/>
</Trigger>
<Trigger Property="local:ListBoxItemAttachedProperties.IsMouseDown" Value="True">
<Setter Property="Background" Value="{StaticResource BlueLightBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
请张贴代码。否则,人们只是在猜测。 – w0051977
难道你不能再为'IsPressed'做另一个触发器吗? – sTrenat
“ListBoxItem”没有'IsPressed'属性 – semidude