我需要以编程方式更改列表视图中所选项目的背景。
目前的样式(默认情况下)
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="images/selection-large.png"/>
</Setter.Value>
</Setter>
</Trigger>
我需要能够以编程方式更改所选项目的背景图像。
我自己试图这样做但是我不确定如何去做。 我注意到listview有一个样式属性,但除此之外我完全被难倒了。
我正在使用VB.net
修改
这样的事情会起作用吗?如果是的话,我做错了什么?使用此代码,我的列表视图完全不可见。
Dim trigger As New Trigger()
trigger.Property = ListViewItem.IsSelectedProperty
trigger.Value = True
trigger.Setters.Add(New Setter(ListViewItem.BackgroundProperty, Brushes.Pink))
mylistview.Style.Triggers.Add(trigger)
mylistview.ItemContainerStyle = Style
答案 0 :(得分:0)
将IsSelected
属性绑定到ViewModel中的某个bool值并切换。
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListView.ItemContainerStyle>
项目ViewModel:
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
NotifyPropertyChange("IsSelected");
}
}
在WPF中,您不会在过程代码中操作UI元素,而是使用DataBinding并操纵模型/ ViewModels的属性
另外,我建议不要在WPF中使用PNG或其他基于位图的内容来处理常规UI元素。
而不是你应该使用基于矢量的WPF元素来创建你的UI,因此不依赖于分辨率。
答案 1 :(得分:0)
您可以在XAML中执行此操作,请尝试以下操作:
<Window.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="images/selection-large.png"/>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
答案 2 :(得分:0)
我终于可以解决了.. 我所要做的就是根据第一个制作另一种风格并给它们两个不同的x:键..然后我就能改变这样的风格。
mylistview.ItemContainerStyle = DirectCast(FindResource("XKeyName"), Style)