2011-12-23 26 views
4

關於我的佈局的一切都會隨着主窗口的大小調整。我正面臨的問題是,正如你所看到的,數據網格離開了屏幕。如果你最大化窗口,數據網格將調整窗口大小,但繼續離開屏幕。我如何獲得它與母網格保持20的邊際?如何讓我的數據網格隨窗口增長並保持邊距?

<Grid> 
    <StackPanel Orientation="Vertical"> 
     <TextBox Height="170" Name="txtSQL" VerticalAlignment="Top" AcceptsReturn="True" TextWrapping="Wrap" Margin="20"/> 
     <Button Content="Run!" Height="23" HorizontalAlignment="Left" Name="btnRun" VerticalAlignment="Top" Margin="20,0,0,0" Width="75" Click="btnRun_Click" /> 

     <Grid> 
      <my:DataGrid Name="dgResults" VerticalAlignment="Top" Margin="20" /> 
     </Grid> 
    </StackPanel> 
</Grid> 

enter image description here

UPDATE: 只是要更加具體。我試圖在這裏完成的效果是這樣的:

當窗口第一次加載時,會出現一個空白數據網格,因此它只有大約15個像素高。當您運行查詢時,它將通過重新分配itemssource來填充數據網格。到目前爲止,當你這樣做的時候,如果數據超過了窗口的大小,它將會離開屏幕的底部。我需要它只展開到窗口的底部,然後啓用滾動條。我可以通過將它包裝在滾動查看器中來做到這一點。但是,當窗口調整大小時,數據網格需要調整大小。

我在想如果安裝程序可能與它有關。該表單實際上是一個wpf頁面被顯示在一個框架中。

UPDATE:

<Page x:Class="Hold_Database___Prototype_1.Views.SQL" 
     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" 
     d:DesignHeight="304" d:DesignWidth="732" 
    Title="SQL" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" AllowDrop="True"> 
     <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition Height="23" /> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
      <TextBox Height="170" Name="txtSQL" VerticalAlignment="Top" AcceptsReturn="True" TextWrapping="Wrap" Margin="20" Grid.Row="0"/> 
      <Button Content="Run!" Height="23" HorizontalAlignment="Left" Name="btnRun" VerticalAlignment="Top" 
        Margin="20,0,0,0" Width="75" Grid.Row="1" Click="btnRun_Click" /> 
     <DockPanel Grid.Row="2"> 
      <my:DataGrid Name="dgResults" Margin="20" /> 
     </DockPanel> 
    </Grid> 
</Page> 
+0

Horizo​​ntalContentAllignment = 「拉伸」,使水平滾動條 – Paparazzi 2011-12-23 23:33:45

+0

這並沒有完成任何事情;網格仍然離開屏幕的底部。 – Sinaesthetic 2011-12-24 00:39:39

回答

2

本例中的底座面板是什麼?

嘗試將DataGrid直接放入沒有堆疊面板的單元格中。如果您正在設置按鈕高度,然後將設置網格設置爲自動。

另外,爲什麼給文本這麼多的空間?

<Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
     <TextBox Height="170" Name="txtSQL" VerticalAlignment="Top" AcceptsReturn="True" TextWrapping="Wrap" Margin="20" Grid.Row="0"/> 
     <Button Content="Run!" Height="23" HorizontalAlignment="Left" Name="btnRun" VerticalAlignment="Top" 
       Margin="20,0,0,0" Width="75" Grid.Row="1" Click="btnRun_Click" /> 
     <my:DataGrid Grid.Row="2" <my:DataGrid Name="dgResults" Margin="20" /> 

然後也設置HorizontalAlignmentVerticleAlignmentHorizontalContentAlignmentVerticalContentAlignment = stretch

2

,因爲你使用的是StackPanelGrid抽出屏幕無需滾動條。在使用StackPanel時必須小心 - 它是所有WPF Panel派生類中最簡單的類型,因爲它的MeasureOverride爲所有子項調用Measure,其大小爲double.PositiveInifity,無論該面板實際有多少空間可用。即使一個ScrollViewer也不會幫你StackPanel(將顯示ScrollBar,但你將無法移動它)。

例如,考慮在高度和寬度的Window 350,和一個Button作爲其內容是在這兩個高度500和寬度:

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="350"> 
    <StackPanel> 
     <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
      <Button Content="Hello" Height="500" Width="500" /> 
     </ScrollViewer> 
    </StackPanel> 
</Window> 

到你的例子類似,這裏的Button抽出在垂直和水平方向都會出現屏幕,並且會出現無法使用的滾動條。如果我們在面板更改爲一個,尊重其給定區域的尺寸(例如DockPanel):

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <DockPanel> 
     <ScrollViewer> 
      <Button Content="Hello" Height="500" /> 
     </ScrollViewer> 
    </DockPanel> 
</Window> 

然後滾動條顯示,其是功能性的,並因此允許所述內容從屏幕到滾動顯示。

希望這會有所幫助!

+0

我試過了dockpanel,但得到了相同的結果。我更新了我的OP,以顯示我現在在 – Sinaesthetic 2011-12-24 02:15:52

+0

您是否嘗試將您的DataGrid(在DockPanel中)放置在ScrollViewer內部?調整窗口大小會發生什麼? – 2011-12-24 02:56:17

0

我所做的是將你想要的控件(你的DataGrid)分別定義爲「拉伸」的水平和垂直對齊,以基於被調整大小的窗口占用大小。

相關問題