如何重置ListViewItem样式?

时间:2012-09-13 10:01:54

标签: c# wpf listview styles listviewitem

我有一个如此定义的xaml样式:

<Style TargetType="{x:Type ListViewItem}">[...]</Style>

<Style TargetType="{x:Type ListViewItem}" x:Key="track_selected">[...]</Style>

以下是以编程方式为listviewitem应用“track_selected”样式的代码

((ListViewItem)lv_tracklist.ItemContainerGenerator.ContainerFromIndex(currentTrackIndex)).Style = FindResource("track_selected") as Style;                

我的问题是,如何将mylistview中的所有listviewitem重置为其默认样式,这是上面列出的第一个?

1 个答案:

答案 0 :(得分:2)

虽然有例外,但不建议在后面的代码中操作Views对象。这应该在xaml文件中完成。

使用WPF时,此示例为错误编码练习

Styles之间切换最好使用StyleSelectors。 在您的情况下,设置ListView的ItemContainerStyleSelector属性。

<Style x:Key="ItemStyle" TargetType="ListViewItem">
   <!-- Setters and Triggers -->
</Style>

<Style x:Key="TrackSelectedStyle" TargetType="ListViewItem">
   <!-- Setters and Triggers -->
</Style>

<example:TrackSelectionStyleSelectorx:Key="myContainerStyleSelector"
ItemsStyle ="{StaticResource ItemStyle}"
TrackSelectedStyle ="{StaticResource TrackSelectedStyle}"/>

<ListView ... ItemContainerStyleSelector="{StaticResource myContainerStyleSelector}"/>

StyleSelector类(将其放在单独的.cs文件中):

public class TrackSelectionStyleSelector: StyleSelector
{
   public Style ItemsStyle {get; set;}
   public Style TrackSelectedStyle {get; set;}

   public override Style SelectStyle( object item, DependencyObject container )
   {
     if ( /* isTrackSelected logic */ )
        return TrackSelectedStyle;

     return ItemsStyle;
   }

}

不要忘记将item参数强制转换为ListViewItems内容类型的类型。