Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何重置ListViewItem样式?_C#_Wpf_Listview_Styles_Listviewitem - Fatal编程技术网

C# 如何重置ListViewItem样式?

C# 如何重置ListViewItem样式?,c#,wpf,listview,styles,listviewitem,C#,Wpf,Listview,Styles,Listviewitem,我有一个这样定义的xaml样式: <Style TargetType="{x:Type ListViewItem}">[...]</Style> <Style TargetType="{x:Type ListViewItem}" x:Key="track_selected">[...]</Style> 我的问题是,如何将mylistview中的所有listviewitem重置为其默认样式,这是上面列出的第一种样式?尽管存在例外情况,但不建议在代

我有一个这样定义的xaml样式:

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

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

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

尽管存在例外情况,但不建议在代码隐藏中操作Views对象。这应该在
xaml
文件中完成

使用WPF时,此示例是错误的编码实践

最好使用
样式选择器
样式之间切换。
在本例中,设置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}"/>

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

为什么要从代码隐藏中设置样式?你是否考虑使用触发器?它们的使用将解决您的问题((ListViewItem)lv_tracklist.ItemContainerGenerator.ContainerFromIndex(currentTrackIndex))。Style=null;谢谢科林史密斯。我必须为(int I=lv_tracklist.Items.Count;--I>=0;){..}循环所有listviewItem吗?或者有更快的解决方案吗?抱歉,但看起来更好这并不能解决我的问题,因为将样式设置为null不会返回到默认样式[…],而是会重置为默认wpf样式:-(
<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}"/>
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;
   }

}