2012-07-18 67 views
0

我有一个控件,它是一个网格,其中第一行包含一些按钮,具有固定的高度,第二(和最后一个)行包含一个ListView。然后我有一个主屏幕,其中只包含一个菜单和上面的这个用户控件。我希望ListView的大小作为窗口的最大值,这意味着如果窗口最大化,ListView将会很大,如果窗口较小,ListView也一样(使用垂直滚动以帮助导航项目)。如何在WPF中的网格内填充ListView填充整个屏幕,即使在调整大小时

这是我正在做它: 窗口:

<Window x:Class="TestUI.MainView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    Width="auto" Height="auto" 
    MinHeight="300" MinWidth="300" 
    Title="Test" 
    DataContext="{Binding MainViewModel, Source={StaticResource Locator}}" > 

<StackPanel Orientation="Vertical" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
    <DockPanel> 
     <Menu DockPanel.Dock="Top" > 
      <MenuItem Header="Item 1" Command="{Binding Command1}"/> 
      <MenuItem Header="Item 2" Command="{Binding Command2}"/> 
      <MenuItem Header="Item 3" Command="{Binding Command3}"/> 
     </Menu> 
    </DockPanel> 
    <DockPanel LastChildFill="True"> 
     <ScrollViewer Content="{Binding Content}" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Disabled" DockPanel.Dock="Bottom" /> 
    </DockPanel> 
</StackPanel> 
</Window> 

用户控制:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="35" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <StackPanel Grid.Row="0" Margin="5, 5, 5, 5" Orientation="Horizontal"> 
     <Button Content="New" Width="60" Command="{Binding NewCommand}"/> 
     <Button Content="Remove" Width="60" Margin="10, 0, 0, 0" Command="{Binding RemoveCommand}" /> 
    </StackPanel> 
    <DockPanel Grid.Row="1" Margin="5,5,5,5" LastChildFill="True" HorizontalAlignment="Stretch"> 
     <ListView x:Name="ListView" SelectionMode="Single" DockPanel.Dock="Top" ItemsSource="{Binding Entities}" SelectedItem="{Binding SelectedEntity}" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" VerticalAlignment="Stretch"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Width="auto" Header="Product" DisplayMemberBinding="{Binding Description}"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </DockPanel> 
</Grid> 

你能帮帮我吗?

谢谢!

回答

2

我刚刚检查了你的用户控件和ListView对接工作得很好。您可以使用背景颜色验证设计师的布局。将listview的背景设置为蓝色显示它正在使用可用空间。

我认为问题出现在主窗体中的布局,特别是Stackpanel。这些是布局问题的臭名昭着,从我可以告诉你不需要它。使用DockPanel作为高级容器而不是多个底座面板。 (这是他们是什么)

<DockPanel> 
    <Menu DockPanel.Dock="Top" > 
     <MenuItem Header="Item 1" Command="{Binding Command1}"/> 
     <MenuItem Header="Item 2" Command="{Binding Command2}"/> 
     <MenuItem Header="Item 3" Command="{Binding Command3}"/> 
    </Menu> 
    <ScrollViewer Content="{Binding Content}" VerticalScrollBarVisibility="Disabled" 
     HorizontalScrollBarVisibility="Disabled" DockPanel.Dock="Fill" /> 
</DockPanel> 

这将使你的菜单在面板的顶部,并让包含用户控件(假设的)使用了剩余的可用空间,您的滚动浏览器。

堆栈面板只适合安排区域内的物品。如果您想使用布局来分配可用空间,请使用DockPanel或Grids。

0

嗨从GridviewColumn删除宽度=“自动”。我希望这会有所帮助

+0

问题不在于宽度,而在于高度。对不起... – jpnavarini 2012-07-18 17:24:31

+0

你在窗口中应用控制。你必须检查的东西应该没有设置的UserControl的高度和宽度属性。并且在窗口中将此控件以高度=“星”的行和宽度的列=“星”的方式包围在网格中。 – ethicallogics 2012-07-18 17:29:14