2017-04-15 210 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>