2017-04-15 213 views
-1

我一直在試圖驗證碼:如何更改ListViewItem的背景顏色?

<Style TargetType="ListViewItem"> 
        <Setter Property="OverridesDefaultStyle" Value="True" /> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ListViewItem"> 
           <ContentPresenter /> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
        <Style.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Foreground" Value="Blue" /> 
          <Setter Property="Background" Value="Red" /> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 

不過,我發現,只有文字的顏色是變化的,但背景仍保持不變。我發現,當我切換到其他觸發類型的時候我連簡單的做到這些行爲不會改變:

<Style TargetType="ListViewItem"> 
       <Setter Property="OverridesDefaultStyle" Value="True" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="ListViewItem"> 
          <ContentPresenter /> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       <Setter Property="Background" Value="Red" /> 
      </Style> 
+0

我想我的答案[這裏](http://stackoverflow.com/questions/41317609/add-more-than-1-datagridcell-with-style-to-a-row-in-wpf- dgv-programatically/41318169#41318169)是你在找什麼。 – CodingYoshi

+0

@CodingYoshi謝謝你的回覆。但是,我是wpf的新手,所以能否請您進一步向我解釋一下? – ntvy95

+0

我能夠重現您的情況(背景不會在ListViewItem上發生變化),並快速瀏覽可視化樹。 ListViewItem確實有一個紅色的背景顏色,所以其他一些對象必須掩蓋它。我相信這裏的問題是覆蓋默認樣式,而不是完全重構它(在Template屬性中),如下所示:' '乾淨地產生一個紅色的背景。 – TiberiumFusion

回答

0

最後我想通了變通的方式。特別感謝@TiberiumFusion的一個很好的提示。雖然,這個解決方案並不像我想要的那麼好。

<Style TargetType="ListViewItem"> 
       <Setter Property="OverridesDefaultStyle" Value="True" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="ListViewItem"> 
          <Border x:Name="border"> 
           <ContentPresenter /> 
          </Border> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsMouseOver" Value="True"> 
            <Setter Property="Control.Foreground" TargetName="border" Value="Blue" /> 
            <Setter Property="Control.Background" TargetName="border" Value="Red" /> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style>