2011-01-31 64 views
0

在我的WPF應用程序(下面發佈XAML)中,我有一個列表視圖,下面有一些標籤和文本框。 ListView下面的所有東西都應該錨定在窗口的底部。 ListView上方的所有內容都需要錨定到窗口頂部。 ListView本身需要垂直擴展以填充它們之間的空間。當我垂直調整窗口大小時,唯一應該改變大小的是列表視圖。需要UI對齊幫助WPF

我把所有東西放在堆棧面板的根目錄下,但它不像我想要的那樣大小。任何人都知道我可以做到這一點?我正在使用C#.NET 4.0和VS2010。

<Window x:Class="TaskManager.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" MinWidth="525" MinHeight="400"> 
    <StackPanel Orientation="Vertical"> 
     <Menu Name="mainMenu" Margin="0,0,0,5"> 
      <MenuItem Header="File"> 
       <MenuItem Header="Quit" /> 
      </MenuItem> 
     </Menu> 
     <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,0,0,5"> 
      <Label>View tasks for user:</Label> 
      <ComboBox Name="userList" MinWidth="150"></ComboBox> 
     </StackPanel> 
     <ListView Name="taskView" VerticalContentAlignment="Stretch"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Task" Width="300"/> 
        <GridViewColumn Header="Hours" Width="50"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="353*" /> 
       <ColumnDefinition Width="97*" /> 
       <ColumnDefinition Width="53" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition/> 
       <RowDefinition/> 
      </Grid.RowDefinitions> 
      <Label Grid.Row="0" Grid.Column="0">Task Description</Label> 
      <TextBox Grid.Row="1" Grid.Column="0"/> 
      <Label Grid.Row="0" Grid.Column="1">Hours</Label> 
      <TextBox Grid.Row="1" Grid.Column="1"/> 
      <Button Grid.Row="1" Grid.Column="2">Add</Button> 
     </Grid> 
    </StackPanel> 
</Window> 

回答

2

這聽起來像DockPanel將有助於你得到想要的結果。在DockPanel中,您可以將部分視圖停靠在窗口的頂部,底部,左側或右側。添加的最後一個元素總是覆蓋窗口的其餘部分。我修改了下面的StackPanel代碼。

<DockPanel> 
    <Menu DockPanel.Dock="Top" Name="mainMenu" Margin="0,0,0,5"> 
     <MenuItem Header="File"> 
      <MenuItem Header="Quit" /> 
     </MenuItem> 
    </Menu> 
    <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,0,0,5"> 
     <Label>View tasks for user:</Label> 
     <ComboBox Name="userList" MinWidth="150"></ComboBox> 
    </StackPanel> 
    <Grid DockPanel.Dock="Bottom"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="353*" /> 
      <ColumnDefinition Width="97*" /> 
      <ColumnDefinition Width="53" /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Label Grid.Row="0" Grid.Column="0">Task Description</Label> 
     <TextBox Grid.Row="1" Grid.Column="0"/> 
     <Label Grid.Row="0" Grid.Column="1">Hours</Label> 
     <TextBox Grid.Row="1" Grid.Column="1"/> 
     <Button Grid.Row="1" Grid.Column="2">Add</Button> 
    </Grid> 
    <ListView Name="taskView" VerticalContentAlignment="Stretch"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Task" Width="300"/> 
       <GridViewColumn Header="Hours" Width="50"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</DockPanel> 
0

這可以使用具有4行定義的網格完成。所有行的高度應設置爲「自動」,除了要擴展的那個以外,應將其設置爲「*」

<Window x:Class="TaskManager.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" MinWidth="525" MinHeight="400"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Menu Grid.Row="0" Name="mainMenu" Margin="0,0,0,5"> 
      <MenuItem Header="File"> 
       <MenuItem Header="Quit" /> 
      </MenuItem> 
     </Menu> 
     <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,0,0,5"> 
      <Label>View tasks for user:</Label> 
      <ComboBox Name="userList" MinWidth="150"></ComboBox> 
     </StackPanel> 
     <ListView Grid.Row="2" Name="taskView" VerticalContentAlignment="Stretch"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Task" Width="300"/> 
        <GridViewColumn Header="Hours" Width="50"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 
     <Grid Grid.Row="3"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="353*" /> 
       <ColumnDefinition Width="97*" /> 
       <ColumnDefinition Width="53" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition/> 
       <RowDefinition/> 
      </Grid.RowDefinitions> 
      <Label Grid.Row="0" Grid.Column="0">Task Description</Label> 
      <TextBox Grid.Row="1" Grid.Column="0"/> 
      <Label Grid.Row="0" Grid.Column="1">Hours</Label> 
      <TextBox Grid.Row="1" Grid.Column="1"/> 
      <Button Grid.Row="1" Grid.Column="2">Add</Button> 
     </Grid> 
    </Grid> 
</Window>