如何通过编程设置属性来使触发器工作?

如何通过编程设置属性来使触发器工作?

问题描述:

我想设置控件的背景颜色,只需按住鼠标左键,然后我希望此控件返回到其正常行为(触发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> 
+0

请张贴代码。否则,人们只是在猜测。 – w0051977

+0

难道你不能再为'IsPressed'做另一个触发器吗? – sTrenat

+0

“ListBoxItem”没有'IsPressed'属性 – semidude

我设法同做我想通过附加属性:

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>