如何在调整窗口大小时调整ListView控件的大小

时间:2014-11-21 07:54:04

标签: wpf listview gridview autoresize

我有一个用户控件,用于在网格中保存ListView。 但我的问题是,如果我最大化我的应用程序窗口,ListView维度(高度)不会相对于窗口更改。它始终保持相同的高度。在这种情况下200如下定义。

<UserControl x:Class="ModuleLogger.Views.ViewLogger"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" >
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="15" />
            <RowDefinition Height="30" />
            <RowDefinition Height="15" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="20"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="20"/>
        </Grid.ColumnDefinitions>
        <Label Grid.Row="1" Grid.Column="0" Content="Log Entries" Style="{StaticResource myLblStatHeaderSmallStyle}"  HorizontalAlignment="Stretch" Grid.ColumnSpan="6" />
        <ListView x:Name="lvLogs"  Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3" ItemsSource="{Binding LogEntries}" Style="{StaticResource myListViewStyle}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Log Entry" Width="810">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock TextWrapping="Wrap" Text="{Binding Path=Entry}"></TextBlock>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</UserControl>

<Style x:Key="myListViewStyle" TargetType="{x:Type ListView}">
    <Setter Property="Background" Value="WhiteSmoke"/>
    <Setter Property="BorderBrush" Value="Gray"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="Margin" Value="5,5,5,5"/>
    <Setter Property="Focusable" Value="False"/>
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="FontWeight" Value="Normal"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>

用户控件本身在tabitem中使用。

<TabItem Header="Log" Name="tabLog" BorderBrush="LightGray" Style="{StaticResource myMainTabItemStyle}" VerticalContentAlignment="Stretch">
    <ItemsControl Name="RegionLog" prism:RegionManager.RegionName="RegionLog" Grid.Column="0"/>
</TabItem>

我试图将RowDefinition更改为

<Grid.RowDefinitions>
     <RowDefinition Height="15" />
     <RowDefinition Height="30" />
     <RowDefinition Height="15" />
     <RowDefinition Height="1*" />
</Grid.RowDefinitions>

这种方法解决了我的问题。但它带来了另一个问题。在这种情况下,我没有得到一个垂直滚动条。所以ListView变得无穷无尽了#34;你可以看到顶部的条目。

有没有办法定义Grid // ListView,以便在窗口调整大小时ListView自动调整大小?

1 个答案:

答案 0 :(得分:2)

最后我可以解决问题。 关键是来自link的信息: ItemsControl占用其子元素所需的空间,这可能导致它大于屏幕。由于其大小基于其子控件,因此在重新调整屏幕大小时,ItemsControl不会调整大小。

所以下面的xaml部分导致了这个问题。

<TabItem Header="Log" Name="tabLog" BorderBrush="LightGray" Style="{StaticResource myMainTabItemStyle}" VerticalContentAlignment="Stretch">
    <ItemsControl Name="RegionLog" prism:RegionManager.RegionName="RegionLog" Grid.Column="0"/>
</TabItem>

我没有使用ItemsControl,而是使用 ContentControl

<TabItem Header="Log" Name="tabLog" BorderBrush="LightGray" Style="{StaticResource myMainTabItemStyle}" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
    <ContentControl Name="RegionLog" prism:RegionManager.RegionName="RegionLog" Grid.Column="0"/>
</TabItem>

所以我的ListView只是扩展到ContentControl给出的最大大小。

也许这可以帮助将来遇到同样问题的人。