具有水平方向的ListView ItemsPanelTemplate,如何识别第一行的ListViewItems?

问题描述 投票:0回答:1

首先,我正在使用MVVM / WPF / 。Net Framework 4.6.1

我有一个水平配置为ListViewItemsPanelTemplate,它显示DataTemplate中的项目。此设置使我可以在ListViewWidth中容纳尽可能多的项目(witdth >>大小与Window相同),并且在调整窗口大小时会做出响应。

到目前为止,一切都很好,现在我只想确定第一行上放置了哪些项目,包括调整窗口的大小以及第一行内的项目增加或减少的时间。

我只想完成此行为,因为我想为这些项目应用不同的模板样式(比方说,我的图像较大或文本颜色不同。)>

enter image description here

以下是ListView的XAML定义:

<ListView x:Name="lv"  
          ItemsSource="{Binding Path = ItemsSource}"
          SelectedItem="{Binding Path = SelectedItem}">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Horizontal"></WrapPanel>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid Width="180" Height="35">
                <Grid.RowDefinitions>
                    <RowDefinition />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Ellipse Grid.Column="0" Grid.Row="0" Height="32" Width="32" 
                         VerticalAlignment="Top" HorizontalAlignment="Left">
                    <Ellipse.Fill>
                        <ImageBrush ImageSource="{Binding IconPathName}" />
                    </Ellipse.Fill>
                </Ellipse>
                <TextBlock Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow"
                           HorizontalAlignment="Left" VerticalAlignment="Top"
                           Text="{Binding Name}" />

            </Grid> 
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

BTW:我已经在解决从每个ListViewItem获取Index

的问题,并根据Grid内部DataTemplateWidth
作为固定值计算了180,但是很遗憾,它没有按我预期的那样工作,因为我必须使用DependencyPropertyListViewActualWidth绑定到我的ViewModel,并且在调整窗口大小时响应不佳。

我知道我正在寻找一种非常特殊的行为,但是如果有人对如何处理此行为有任何建议,我将非常感谢。即使您认为我应该使用其他控件,也欢迎您提出任何想法,请详细说明。

提前感谢!

首先,我正在使用MVVM / WPF / .Net Framework 4.6.1,我有一个ListView,它的水平配置了ItemsPanelTemplate,可显示DataTemplate中的项目。此设置...

wpf listview mvvm datatemplate listviewitem
1个回答
0
投票

您不应该在任何视图模型中处理布局。如果您没有扩展ListView,请考虑使用附加行为(原始示例):

ListBox.cs

© www.soinside.com 2019 - 2024. All rights reserved.