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



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

样式当前看起来像这样(默认)

        <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)

相关内容

  • 没有找到相关文章

最新更新