2012-08-06 70 views
0

我有一個包含2個子控件的網格。我有一個簡單的堆疊面板,這將駐留在網格中的列表框:如何控制網格高度?

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="5" /> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 
     <ListBox Name="lstGroups" Grid.Row="0" /> 
     <StackPanel Grid.Row="2" /> 
<Grid> 

的問題是,我的列表框使過去已分配給電網的可視屏幕面積。我怎樣才能確保我的ListBox佔用可用空間,但它不會呈現在第二行,我需要一個垂直滾動條來查看所有內容?

+0

ListBox是否有最小尺寸?風格可能是設置一個。否則,你的代碼應該阻止ListBox的大於Grid.Height - StackPanel.Height - 5.我假設你打算把第2行的StackPanel放在第1行。 – NtscCobalt 2012-08-06 19:33:56

+0

不,上面的佈局是正確的。沒有最小/最大值 - 只是你在這裏看到的xaml。我想要的是將listBox固定到第0行的查看區域 - 問題是它擴展了可視區域,這意味着我必須添加一個滾動條,而且我不需要任何滾動條。 – MickeySixx 2012-08-06 19:40:24

+0

你有三行定義 - 它們各自爲何?我猜「*」是用於ListBox的。你的意思是StackPanel在第2行而不是第1行? – ChimeraObscura 2012-08-06 21:57:35

回答

0

您應該爲此使用DockPanel。你也可以編程設置你的Listbox的高度,但這不是一個很乾淨的方法。

<Window x:Class="MobilWPF.Windows.testWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="testWindow" Height="300" Width="300"> 
    <DockPanel> 
     <StackPanel DockPanel.Dock="Bottom" > 
      <TextBlock Text="blah"/> 
     </StackPanel> 
     <ListBox Name="lstGroups" /> 
    </DockPanel> 
</Window> 


namespace MobilWPF.Windows 
{ 
    /// <summary> 
    /// Interaction logic for testWindow.xaml 
    /// </summary> 
    public partial class testWindow : Window 
    { 
     public testWindow() 
     { 
      InitializeComponent(); 

      for (int i = 0; i < 200; i++) 
      { 
       lstGroups.Items.Add(i.ToString()); 
      } 
     } 
    } 
} 
+0

我得到了與DockPanel – MickeySixx 2012-08-06 19:58:42

+1

@MickeySixx相同的行爲,我更新了我的答案並對其進行了測試。唯一的區別是我的窗口有一個固定的高度和寬度。所以我猜想上面你發佈的一個控件有一個無限的高度。 – 0x4f3759df 2012-08-06 20:05:54