WPF以编程方式更改样式(带触发器)

时间:2013-08-03 13:30:01

标签: wpf vb.net listview styles

我需要以编程方式更改列表视图中所选项目的背景。

目前的样式(默认情况下)

        <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

3 个答案:

答案 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)
相关问题