避免背景变化
问题描述:
我有一个项目的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。
有没有办法避免背景变化?
答
您可以通过更改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
你这么好的工作!这个对我有用!!! –
因为你如何做。那么分离出你的物体呢?将您的背景更改为与您正在使用的另一个边框分离的边框与正在将BorderBrush应用于Z-index中具有透明BG的更高边框的边框,以便您可以在显示所选边框的同时保留已更改的背景? –
请参阅http://stackoverflow.com/questions/21559833/listbox-and-listview-highlighting-net-4-0 – Paparazzi
@ChrisW。我遇到的问题是,我必须拥有'ItemTemplate'中的元素的IsSelected触发器属性,这不起作用,所以我将不得不使用来自边界的相对源绑定到'ListViewItem',这是一个烂摊子...但我可能最终会这样做无论如何,谢谢:) – pseudoDust