在窗口底部停靠一个可调整大小的wpf DataGrid

时间:2013-03-12 08:28:08

标签: wpf wpfdatagrid

在WPF项目中,我想将DataGrid停靠到窗口的底部,这样如果窗口调整大小,我将能够使用更多的DataGrid。像这样:

enter image description here

我该怎么做?我所有的DockPanel尝试都失败了。

目前的尝试在这里:

<Window x:Class="Foo.SQLDialog"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:c="clr-namespace:Foo.Controls"
   Title="test" ResizeMode="CanResize" Width="400" Height="400">
  <StackPanel Orientation="Vertical" Height="Auto" Width="Auto">
    <StackPanel Orientation="Vertical">
      <Label Content="SQL" HorizontalAlignment="Left"/>
      <TextBox Width="377" Height="100" Name="txtSQL"/>
      <Button Content="Run SQL" Click="Button_Click_1" />
    </StackPanel>
    <Label Content="Result" HorizontalAlignment="Left"/>
    <ScrollViewer Width="Auto" Height="180" DockPanel.Dock="Right,Bottom"
        ScrollViewer.CanContentScroll="True" 
        ScrollViewer.VerticalScrollBarVisibility="Auto"
        ScrollViewer.HorizontalScrollBarVisibility="Auto">
      <DataGrid x:Name="dataResult" />
    </ScrollViewer>
  </StackPanel>
</Window>

但是,scrollviewer + datagrid的高度不会适应。

2 个答案:

答案 0 :(得分:6)

首先,在没有DockPanel作为父级的情况下使用DockPanel.Dock并没有做太多...

在我的示例中,我将您的根StackPanel更改为DockPanel,以便它可以根据您的需要使用。
我还使用了 DockPanel.LastChildFill 属性,确保DockPanel的最后一个子节点获得所有剩余空间:

<DockPanel LastChildFill="True">
    <StackPanel Orientation="Vertical" DockPanel.Dock="Top">
        <Label Content="SQL" HorizontalAlignment="Left"/>
        <TextBox Width="377" Height="100" Name="txtSQL"/>
        <Button Content="Run SQL" Click="Button_Click_1" />
    </StackPanel>
    <Label Content="Result" HorizontalAlignment="Left" DockPanel.Dock="Top"/>
    <ScrollViewer DockPanel.Dock="Bottom,Right"
    ScrollViewer.CanContentScroll="True" 
    ScrollViewer.VerticalScrollBarVisibility="Auto"
    ScrollViewer.HorizontalScrollBarVisibility="Auto">
        <DataGrid x:Name="dataResult"  />
    </ScrollViewer>
</DockPanel>

最后,为了让它在所有剩余空间上保持伸展状态,我删除了您设置的Height属性,因为这会阻止它拉伸。

答案 1 :(得分:1)

不确定是否有用或者我理解你是否以正确的方式提问,但是你试过这个:

<DataGrid DockPanel.Dock="Right, Bottom" VerticalAlignment="Bottom" HorizontalAlignment="Right" ></DataGrid>