2013-08-03 32 views
2

我需要以编程方式更改列表视图中所选项目的背景。以编程方式更改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

编辑

会是这样的工作?如果是这样,我做错了什么?使用此代码我的listview是完全不可见的。

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

我能够最终解决它.. 所有我要做的就是让基于第一彼此的风格,给他们两个不同的x:键。然后我能够改变这样的风格。

mylistview.ItemContainerStyle = DirectCast(FindResource("XKeyName"), Style) 
0

IsSelected属性绑定到视图模型的一些布尔值和切换这一点。

<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元素,而不是使用数据绑定和预留操纵你的模型/的ViewModels的属性

作为,我建议不要在WPF中为常规UI元素使用PNG或其他基于位图的东西。

而不是你应该使用WPF元素创建你的UI,这是基于矢量的,因此独立于分辨率。

+0

我不认为我明白你告诉我该怎么做。 – Mattigins

+0

@Mattigins抱歉,C#而不是VB.Net,我几乎不记得VB.Net语法。您需要阅读MVVM以及为什么在编写单行代码之前在WPF中这很重要。 –

+0

我已将我的尝试添加到了最初的帖子,我是否在正确的轨道上? – Mattigins

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> 
+0

这段代码完成了什么? – Mattigins

+0

当您选择该项目时,它会更改ListViewItem的背景......是您想要完成的任务吗? –

+0

对不起,我已经完成了与初始文章中的代码..我需要做的是改变什么背景图像是通过代码隐藏。 – Mattigins

相关问题