【问题标题】:How to change a property of all listview items in WPF?如何更改 WPF 中所有列表视图项的属性?
【发布时间】:2020-03-25 15:59:54
【问题描述】:

我正在尝试更改 ListView(WPF) 中所有项目的 BorderThickness 属性。问题是我的列表视图的项目绑定到列表的属性,其中Song 是一个类。这是我绑定它们的方法:

<ListView x:Name="listviewPlaylist" Margin="-4,-3,0,3" SelectionChanged="ListviewPlaylist_SelectionChanged" AllowDrop="True" Drop="ListviewPlaylist_Drop" DragEnter="ListviewPlaylist_DragEnter" PreviewMouseDown="ListviewPlaylist_PreviewMouseDown" GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler" MouseMove="ListviewPlaylist_MouseMove">
         <ListView.View>
                <GridView>
                    <GridViewColumn Header="Artist" Width="100" DisplayMemberBinding="{Binding Artist}" />
                    <GridViewColumn Header="Album" Width="200" DisplayMemberBinding="{Binding Album}" />
                    <GridViewColumn Header="Track no" Width="50" DisplayMemberBinding="{Binding TrackNo}" />
                    <GridViewColumn Header="Title" Width="200" DisplayMemberBinding="{Binding Title}" />
                    <GridViewColumn Header="Duration" Width="80" DisplayMemberBinding="{Binding Duration}" />
                 </GridView>
           </ListView.View>
</ListView>

如果我现在尝试循环遍历 listviewPlaylist.Items,我无法将 itemObj 转换为 ListViewItem

foreach (var itemObj in listviewPlaylist.Items)
            {
                var lvItem = (ListViewItem)itemObj; 
                lvItem.BorderThickness = new Thickness(1);
            }

然后我得到这个错误:

System.InvalidCastException: '无法转换类型的对象 'MayPlayer.Song' 输入 'System.Windows.Controls.ListViewItem'。'

有没有办法从 ListView 而不是类访问项目? 我还没有在互联网上找到任何解决方案,我也尝试过:

var lvItem = itemObj as ListViewItem; 

我不确定,或者我必须在这个问题中添加更多内容,请告诉我。 提前致谢。

编辑

感谢ASh,我使用了ItemContainerStyle

Style style = new Style();
style.TargetType = typeof(ListViewItem);
style.Setters.Add(new Setter(ListViewItem.BorderThicknessProperty, new Thickness(1)));
listviewPlaylist.ItemContainerStyle = style;

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    ListViewItemsSource 中的数据项生成ListViewItem,但那些ListViewItems 不能直接访问(而且它们不应该真正访问。启用虚拟化后,一个 ListViewItem 可以重复用于多个数据项,滚动 ListView 时)。使用ItemContainerStyle 更改它们的属性:

    <ListView>
      <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
           <Setter Property="BorderThickness" Value="1"/>
        </Style>
      </ListView.ItemContainerStyle>
    </ListView>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-30
      • 2013-01-29
      • 2012-05-28
      • 1970-01-01
      • 2013-04-14
      • 2017-01-02
      • 2014-10-10
      • 1970-01-01
      相关资源
      最近更新 更多