2009-01-21 205 views
3

我有一個列表視圖,你選擇一個行/項目。這與一個在行上顯示圖像的數據觸發器相關聯。圖像只應該在選中該行時顯示。WPF ListViewItem失去焦點事件 - 如何獲取事件?

這部分工作正常,但是當您將焦點移到其他內容(例如文本框或消息框顯示)時,listviewitem失去焦點,即不再顯示該行上的高亮顯示。問題是我的形象依然存在。當列表視圖失去焦點時,它應該被隱藏/摺疊......如果在列表視圖上選擇不同的項目/行,它可以正常工作。

任何人都可以幫忙嗎?

<Style x:Key="deleteImageStyle" TargetType="{x:Type Image}"> 
    <Setter Property="Source" Value="Resources/iconDelete.png" /> 
    <Setter Property="Margin" Value="0,2,5,0" /> 
    <Setter Property="Height" Value="16" /> 
    <Setter Property="Width" Value="16" /> 
    <Setter Property="HorizontalAlignment" Value="Right" /> 
    <Setter Property="VerticalAlignment" Value="Top" /> 
    <Setter Property="Cursor" Value="Hand" /> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True"> 
      <Setter Property="Visibility" Value="Visible"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="False"> 
      <Setter Property="Visibility" Value="Hidden"/> 
     </DataTrigger> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Visibility" Value="Hidden" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

問候

TravisPUK

+0

你能後你有這麼遠的代碼? – 2009-01-21 19:23:42

回答

3

我想你混淆IsSelected和IsFocused。

將您的觸發器綁定到IsFocused而不是IsSelected以獲得所需結果的實驗​​。

如果我理解正確,您只希望圖像在IsSelected和IsFocused都是true的情況下可見,否則隱藏。

執行此操作的一種方法是將默認可見性設置爲可見,然後添加兩個將可見性設置爲隱藏的觸發器:IsSelected = False的一個觸發器,以及IsFocused = False的另一個觸發器。

或者相反,設置默認可見性設置爲隱藏,並使用與MultiTrigger = IsSelected True和IsFocused =真能見度設置爲可見

0

@Bubblewrap,

感謝您的信息,這個漂亮的很好地解決了這個問題。根據下面我不得不在兩種情況下添加,因爲默認似乎不起作用...但是我還沒有嘗試過MultiTrigger方法,稍後會做。

這就是我最終得到的結果。

<Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True"> 
       <Setter Property="Visibility" Value="Visible"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsFocused}" Value="True"> 
       <Setter Property="Visibility" Value="Visible"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="False"> 
       <Setter Property="Visibility" Value="Hidden"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsFocused}" Value="False"> 
       <Setter Property="Visibility" Value="Hidden"/> 
      </DataTrigger> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Visibility" Value="Hidden" /> 
      </Trigger> 
     </Style.Triggers> 

感謝您的幫助,這會讓我過去我的問題。我認爲我的IsEnabled觸發器現在可能是多餘的。

感謝

TravisPUK