垂直布局ListView项目,大小统一

时间:2014-11-20 16:44:48

标签: wpf listview layout

我正在WPF中设计一个UserControl来显示多轨音频信号。简而言之,我将打开一个包含音轨的文件,主窗口内容将填充我的UserControl,而UserControl将包含文件中每个音轨的一个项目。每个项目都会伸展以占据控件的整个宽度,并设置其高度以使项目均匀分布。

对于包含4个项目(灰色)的文件,这或多或少是所需的结果。请注意,每个项目占据可用高度的四分之一,并且所有项目都具有相同的宽度:

enter image description here

目前,我有这段代码(XAML):

<ListView
    ItemsSource="{Binding Tracks}"
    Width="{Binding ActualWidth, ElementName=UserControl}"
    Height="{Binding ActualHeight, ElementName=UserControl}"
    >
    <ListView.ItemTemplate>
        <DataTemplate DataType="{x:Type local:SoundTrack}">
            <Border BorderBrush="Black" BorderThickness="1">
                <local:TrackView/>
            </Border>
        </DataTemplate>
    </ListView.ItemTemplate>        
</ListView>

TrackView包含:

<Border BorderThickness="1" BorderBrush="Black">
    <Grid x:Name="LayoutRoot" Background="#FFFFDCF2">
        <Polyline Stretch="Fill" Points="{Binding Pontos}" Fill="#FFD60D0D"/>
    </Grid>
</Border>

问题是:ListView中的每个ListViewItem都以不规则的比例呈现。一切都被限制在左边的几个像素,并且高度不会分布(相反,它似乎以绝对单位呈现,这是不希望的)。

我很乐意使用任何其他ItemsControl,但我更愿意使用一个现成的,而不是子类化ItemsControl自己构建它。

1 个答案:

答案 0 :(得分:3)

这将为您提供统一的网格作为您的项目主持人,因此他们应该均匀地分配他们的高度。

        <ListView>
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Columns="1" IsItemsHost="True"/>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
        </ListView>

编辑:同时去除ListView上的高度和宽度绑定,并将“水平/垂直”对齐和内容对齐设置为“拉伸”