【问题标题】:Laying out ListView Items vertically with uniform size以统一大小垂直布局 ListView 项
【发布时间】:2015-01-18 15:11:17
【问题描述】:

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

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

目前,我有这个代码 (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 来自己构建它。

【问题讨论】:

    标签: wpf listview layout


    【解决方案1】:

    这会给你一个统一的网格作为你的项目宿主,所以它们都应该均匀地分布它们的高度。

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

    编辑:同时摆脱 ListView 上的高度和宽度绑定,并将水平/垂直对齐和内容对齐设置为 Stretch

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 2014-10-07
      • 2012-10-25
      • 2018-07-28
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多