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

Wpf 调整窗口大小时如何调整ListView控件的大小,wpf,listview,gridview,autoresize,Wpf,Listview,Gridview,Autoresize,我有一个在网格中保存ListView的用户控件。 但我的问题是,如果我最大化我的应用程序窗口,ListView维度(高度)相对于窗口不会改变。它总是保持相同的高度。在这种情况下,定义如下200 <UserControl x:Class="ModuleLogger.Views.ViewLogger" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns

我有一个在网格中保存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 Header="Log" Name="tabLog" BorderBrush="LightGray" Style="{StaticResource myMainTabItemStyle}" VerticalContentAlignment="Stretch">
    <ItemsControl Name="RegionLog" prism:RegionManager.RegionName="RegionLog" Grid.Column="0"/>
</TabItem>

我已尝试将我的行定义更改为

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

这种方法解决了我的问题。但这给我带来了另一个问题。在这种情况下,我没有得到一个垂直的滚动条。因此,ListView变得“无穷无尽”,您只能看到最上面的条目


是否有方法定义网格//列表视图,以便在窗口调整大小时列表视图自动调整大小

我终于可以解决这个问题了。 关键是以下信息: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给定的最大大小


也许这对将来遇到同样问题的人会有所帮助。

您粘贴在此处的代码工作正常,可以满足您的需要(具有星星高度)。问题可能出现在样式“myListViewStyle”中,也可能出现在粘贴零件外部的XAML中。我们需要看到更多的代码来帮助您。@Eirik:我已经更新了问题并添加了整个UserControl以及相关的ListView样式。也许这有帮助。THX代码仍按此处的预期工作。用户控件放在哪里?查看可视树,检查是否有任何控件允许内容在可视区域之外增长,例如包含UserControl的StackPanel。UserControl在我更新时在tabitem中使用。这可能是由tabitem引起的吗?如何防止tabitem让我的usercontrol以这种方式扩展?请进一步查看可视化树。如果TabControl位于StackPanel中,它也可能导致您的体验。检查视觉树一直到顶部,并尝试确定是否存在允许内容在可视区域之外增长的控件。是的,这正是我所说的“允许内容在可视区域之外增长的任何控件”。我只是错过了你有一个ItemsControl在那里…哦,好吧,幸好你解决了:)谢谢你的帮助。你的问题/提示引导我找到了解决方案。我只是想在这里回答这个问题,这样其他人都能快速找到解决方案。
<TabItem Header="Log" Name="tabLog" BorderBrush="LightGray" Style="{StaticResource myMainTabItemStyle}" VerticalContentAlignment="Stretch">
    <ItemsControl Name="RegionLog" prism:RegionManager.RegionName="RegionLog" Grid.Column="0"/>
</TabItem>