避免背景变化

避免背景变化

问题描述:

我有一个项目的ListView和我改变基于结合项目背景:避免背景变化

<ListView ItemsSource="{Binding someCollection}"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Status}" Value="someValue"> 
        <Setter Property="Border.Background" Value="DarkGreen"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Status}" Value="someOtherValue"> 
        <Setter Property="Border.Background" Value="LightGreen"/> 
       </DataTrigger> 
       <!-- and many more --> 

       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="BorderThickness" Value="2" /> 
        <Setter Property="BorderBrush" Value="Red" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

正如你可以看到我也改变所选项目的边框。

问题是,当一个项目被选中时,它的背景变化,覆盖我的DataTriggers。

有没有办法避免背景变化?

+0

因为你如何做。那么分离出你的物体呢?将您的背景更改为与您正在使用的另一个边框分离的边框与正在将BorderBrush应用于Z-index中具有透明BG的更高边框的边框,以便您可以在显示所选边框的同时保留已更改的背景? –

+0

请参阅http://stackoverflow.com/questions/21559833/listbox-and-listview-highlighting-net-4-0 – Paparazzi

+0

@ChrisW。我遇到的问题是,我必须拥有'ItemTemplate'中的元素的IsSelected触发器属性,这不起作用,所以我将不得不使用来自边界的相对源绑定到'ListViewItem',这是一个烂摊子...但我可能最终会这样做无论如何,谢谢:) – pseudoDust

您可以通过更改ListViewItem的ItemContainerStyle来避免ListViewItem的背景颜色。

<ListView.ItemContainerStyle> 
       <Style TargetType="{x:Type ListViewItem}"> 
        <Setter Property="Background" Value="Transparent"/> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
        <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
        <Setter Property="Padding" Value="0,0,0,0"/> 
        <Setter Property="Margin" Value="0,0,0,0"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type ListViewItem}"> 
           <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> 
            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
           </Border> 
           <ControlTemplate.Triggers> 
            <Trigger Property="IsSelected" Value="true"> 
             <Setter Property="BorderThickness" Value="2" /> 
             <Setter Property="BorderBrush" Value="Red" /> 
            </Trigger>        
           </ControlTemplate.Triggers> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListView.ItemContainerStyle> 
+0

你这么好的工作!这个对我有用!!! –