我需要以编程方式更改列表视图中所选项目的背景。
样式当前看起来像这样(默认)
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="images/selection-large.png"/>
</Setter.Value>
</Setter>
</Trigger>
我需要能够以编程方式更改所选项目的背景图像。
我自己也试过这样做,但我真的不知道该怎么做。我确实注意到listview有一个styles属性,但除此之外,我完全被难住了。
我正在使用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
将IsSelected
属性绑定到ViewModel中的某个布尔值并切换。
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListView.ItemContainerStyle>
项目视图模型:
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
NotifyPropertyChange("IsSelected");
}
}
在WPF中,您不操作过程代码中的UI元素,而是使用DataBinding并操作模型/ViewModels的属性
顺便说一句,我建议不要在WPF中的常规UI元素中使用PNG或其他基于位图的东西。
相反,您应该使用WPF元素创建UI,这些元素基于向量,因此与分辨率无关。
您可以在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>
我终于解决了。。我所要做的就是在第一个的基础上制作另一个风格,并给它们两个不同的x:键。。然后我就可以改变这样的风格了。
mylistview.ItemContainerStyle = DirectCast(FindResource("XKeyName"), Style)