2014-09-24 41 views
0

我正在努力與我的XAML!我有3行,他們並沒有真正改變頁面的高度,除了中間行。中間一行有一個ListBox。將scrollviewr添加到列表框

根據屏幕的大小,我希望第二行的高度隨着項目被添加到列表框中而變大,除非它將第三行推出屏幕。在這種情況下,我想讓列表框顯示一個滾動條。我不知道我怎麼能做到這一點。

我的研究顯示身高我們有自動和* - 自動將基於控件大小,*將填補整個空白。我看不出這些如何適合我需要的東西...

以下是UserControl的代碼。此UserControl在父項TabControl中呈現。

我的努力是

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 

     <StackPanel Grid.Row="0"> 
       <TextBlock Text="[?] Source directory" /> 
     </StackPanel> 

     <ListView ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding Folders}" Grid.Row="1" > 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         //data template code 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListView> 

      <StackPanel Grid.Row="2"> 
        <Button Content="Save" /> 
      </StackPanel> 

    </Grid> 

編輯

如果我設置網格上的一個高度,它的工作原理,但是,設置一個固定的高度是不是因爲它不會擴展爲一個選項任何決議。

+0

http://www.codeproject.com/Articles/30904/WPF-Layouts-A-Visual-Quick-Start – 2014-09-24 17:12:19

+0

所以你想要這兩個StackPanels停靠在頂部和底部,同時允許ListView佔用屏幕的整個中間部分? – estebro 2014-09-24 17:12:40

+0

@estebro這是正確的 – MyDaftQuestions 2014-09-24 17:23:43

回答

1

滾動條將不會顯示出來,因爲它不知道這是Grid而且由於RowDefinitions被定義爲Auto*父的Height

如果你想滾動條顯示出來,你必須明確地設置高度在Grid

<Grid Height="700"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <StackPanel Grid.Row="0"> 
      <TextBlock Text="[?] Source directory" /> 
    </StackPanel> 

    <ListView ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding Folders}" Grid.Row="1" > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        //data template code 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListView> 

    <StackPanel Grid.Row="2"> 
     <Button Content="Save" /> 
    </StackPanel> 

</Grid> 
+0

雖然您提供的代碼有效,但問題是,它需要根據不同的屏幕分辨率進行調整。雖然1024 * 768的高度不錯,但如果某人擁有800 * 600的高度,或者某個人的分辨率更高,則不是。真的沒有辦法讓這種動態? – MyDaftQuestions 2014-09-24 17:38:43

+0

@MyDaftQuestions如果你想讓它按照不同的分辨率進行縮放,那麼你將不得不計算你想要多少高度的'Grid'來設置它。您可以使用創建附加屬性並設置計算出的高度值。或者,你可以嘗試在裏面使用'ViewBox',但我忘了它是否工作。 – 2014-09-24 21:18:27

0

另外,

你可以使用一個DockPanel佈局與它的屬性LastChildFill=True。然後,您還需要將屬性DockPanel.Dock = [LOCATION]添加到每個元素(StackPanels和ListView)。由於您希望ListView佔用剩餘空間,因此請確保將其作爲<DockPanel>中的最後一個子項。

+0

有趣的,讓我試試吧 – MyDaftQuestions 2014-09-24 17:40:17

+0

聽起來不錯。如果您需要一些幫助,請在您的評論中標記我。 – estebro 2014-09-24 17:43:47

+0

對不起,這不起作用。我試過了。根據第三篇文章,讓它起作用的唯一方法是爲控件設置一個高度。問題是,這意味着它不會以不同的分辨率進行縮放 – MyDaftQuestions 2014-09-24 17:45:56