带标题的WPF List控件

时间:2014-04-08 13:59:52

标签: wpf xaml listview wpf-controls

我是WPF的新手。我试图在具有标题的可滚动列表/网格中显示信息,并且不允许用户单击列表中的项目。此外,我需要在列表中的每个项目之间使用分隔符。

现在我正在使用HeaderedContentControl并在ListView中添加HeaderedContentControl.Content。我似乎无法在不设置特定高度的情况下滚动ListView,让控件能够调整大小会很好。

<UserControl ...>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <HeaderedContentControl Margin="10">
            <HeaderedContentControl.Header>
                <Label ... />
            </HeaderedContentControl.Header>
            <HeaderedContentControl.Content>
                <ListView ItemsSource="{Binding Items}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Vertical">
                                <TextBlock Text="{Binding Info1}" />
                                <TextBlock Text="{Binding Info2}" />
                                <Separator />
                            </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </HeaderedContentControl.Content>
        </HeaderedContentControl>
    </Grid>
</UserControl>

过去,如果我把它作为Grid的直接子项,我已经能够得到一个ListView滚动,但是这里没有把*的高度作为约束。

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用数据网格?根据您的描述,我创建了以下xaml并进行了测试,我相信它满足您的要求。

<DataGrid ItemsSource="{Binding Items}" HeadersVisibility="Column" 
              VerticalScrollBarVisibility="Auto" IsReadOnly="True"
              CanUserSortColumns="False" AutoGenerateColumns="False"
              IsHitTestVisible="True"
              CanUserReorderColumns="False" Height="100"
              >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Header1" Binding="{Binding Info1}"/>
            <DataGridTextColumn Header="Header2" Binding="{Binding Info2}"/>
        </DataGrid.Columns>
        <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Setter Property="IsHitTestVisible" Value="False"/>
            </Style>
        </DataGrid.CellStyle>
        <DataGrid.ColumnHeaderStyle>
            <Style TargetType="DataGridColumnHeader">
                <Setter Property="IsHitTestVisible" Value="False"/>
            </Style>
        </DataGrid.ColumnHeaderStyle>
    </DataGrid>

必须在单元格样式和列标题样式中将IsHitTestVisible设置为false才能使滚动条仍然有效。

Datagrids拥有更多属性,您可以利用这些属性来获得您正在寻找的内容。