我有这样定义的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重置为默认样式,这是上面列出的第一个样式?
发布于 2012-09-13 12:02:49
尽管有例外情况,但不建议在代码后面操作视图对象。这应该在xaml文件中完成。
本例是在使用WPF时使用的不良编码实践。
在Styles之间切换是使用StyleSelectors的最佳方式。在您的情况下,设置ItemContainerStyleSelector属性的ListView。
<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内容类型的类型。
https://stackoverflow.com/questions/12403804
复制相似问题