首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重置ListViewItem样式?

如何重置ListViewItem样式?
EN

Stack Overflow用户
提问于 2012-09-13 10:01:54
回答 1查看 895关注 0票数 0

我有这样定义的xaml样式:

代码语言:javascript
复制
<Style TargetType="{x:Type ListViewItem}">[...]</Style>

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

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

代码语言:javascript
复制
((ListViewItem)lv_tracklist.ItemContainerGenerator.ContainerFromIndex(currentTrackIndex)).Style = FindResource("track_selected") as Style;                

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

EN

回答 1

Stack Overflow用户

发布于 2012-09-13 12:02:49

尽管有例外情况,但不建议在代码后面操作视图对象。这应该在xaml文件中完成。

本例是在使用WPF时使用的不良编码实践。

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

代码语言:javascript
复制
<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文件中):

代码语言:javascript
复制
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内容类型的类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12403804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档