2010-11-08 21 views
0

我有一個包含一些具有模板的項目的列表框。這些項目是在運行時創建的。當鼠標懸停在ListBoxItem上時,模板會觸發縮放動畫。我想在用戶點擊該項目時更改該項目的背景。下面的代碼不起作用,因爲我相信IsMouseCaptured(click)是由列表框選擇器處理的。任何想法如何在XAML代碼中完成這一切?如何處理在WPF中捕獲的鼠標的ListBoxItem樣式觸發器

<ControlTemplate.Triggers> 
     <Trigger Property="IsMouseCaptured" Value="True"> 
      <Setter TargetName="rec" Property="Fill" Value="Black" /> 
     </Trigger>  
</ControlTemplate.Triggers> 

回答

1

當用戶單擊列表框中的項目時,它將被選中,因此您的觸發器需要在IsSelected-Property上進行操作。

爲ListBoxItem創建樣式,將觸發器放在IsSelected-Property上,並將該樣式設置爲ItemContainerStyle。

+0

如果選中該項目,這對於修復背景顏色是合理的。但是我想要做的只是在鼠標左鍵關閉時設置背景顏色,即模仿按鈕行爲。有任何想法嗎? – Edgar 2010-11-08 14:48:18

+0

你必須在MouseUp EventHandler中取消選擇。除此之外,我看不到任何機會。 – Falcon 2010-11-09 08:07:59

0

正如Falcon所說,你可以爲你的任務使用事件。這甚至可以純粹在XAML中完成,如下所示:

<EventTrigger RoutedEvent="MouseDown" > 
    <EventTrigger.Actions>      
     <BeginStoryboard x:Name="ClickBackground"> 
      <Storyboard> 
       <ObjectAnimationUsingKeyFrames 
        Duration="0" FillBehavior="HoldEnd" 
        Storyboard.TargetName="rec" 
        Storyboard.TargetProperty="Fill"> 
        <DiscreteObjectKeyFrame KeyTime="0"> 
         <DiscreteObjectKeyFrame.Value> 
          <SolidColorBrush Color="Black" /> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrame>       
       </ObjectAnimationUsingKeyFrames>         
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger.Actions> 
</EventTrigger> 
<EventTrigger RoutedEvent="MouseUp" > 
    <EventTrigger.Actions>      
     <StopStoryboard BeginStoryboardName="ClickBackground" /> 
    </EventTrigger.Actions> 
</EventTrigger> 
<EventTrigger RoutedEvent="MouseLeave" > 
    <EventTrigger.Actions>      
     <StopStoryboard BeginStoryboardName="ClickBackground" /> 
    </EventTrigger.Actions> 
</EventTrigger> 
相關問題