2010-08-13 144 views
1

我有一個ListView,其中ListView.ViewGridViewWPF中的觸發器不起作用

默認情況下,mouseOver正在工作,ListViewItem在鼠標懸停時突出顯示,並在單擊它時被選中。但是在我修改了ControlTemplate後,我得到了我想要的模板,但高亮和選擇消失了。

我使用觸發器,但它不工作。

這是我的代碼。

<Style x:Key="filesListViewItemStyle" TargetType="{x:Type ListViewItem}"> 
      <Setter Property="IsSelected" Value="{Binding FileIsSelected}"/> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListViewItem"> 
         <Grid Height="40"> 
          <GridViewRowPresenter/> 
          <Line X1="0.0" Y1="0.0" X2="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListView}}}" Y2="0.0" StrokeThickness="1" StrokeDashArray="2" Stroke="Gray" /> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter Property="Background" Value="Green"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

在我的模板,我居然加了行2列ListViewItem之間的隔板。

我只是不明白爲什麼觸發器不工作!

+0

請檢查ListViewItem的默認ControlTemplate,看看你是否沒有遺漏任何東西。或者你可以把它作爲一個基地,並根據你的喜好調整它。我通常傾向於避免ControlTemplates更換(除非絕對需要),因爲我不確定我是否理解所有錯綜複雜的問題。 – Gishu 2010-08-13 02:36:35

回答

2

Control的Background屬性僅用於ControlTemplate。您已將模板替換爲不使用「背景」的模板,因此設置屬性不起作用。您可以使用{TemplateBinding Background}將屬性綁定到控件的背景。也許你想綁定網格的背景:

<ControlTemplate TargetType="ListViewItem"> 
    <Grid Height="40" Background="{TemplateBinding Background}"> 
     <GridViewRowPresenter/> 
+1

它正在工作!謝謝!!! 1行代碼解決了我的12個小時慘不忍睹! – VHanded 2010-08-13 03:01:45