2016-05-26 126 views
0

我有一個ListView顯示兩個滾動條。爲了實現這一目標,我會將位於網格狀之下的邊境之內我的ListView:WPF XAML ListView與滾動條

<Window ... 
    MinWidth="600" MinHeight="500" Width="800" Height="500" 
    Topmost="True" 
    WindowStartupLocation="CenterScreen" 
    SizeToContent="Height" WindowStyle="None"> 

    <Window.Resources> 
     <ResourceDictionary> 
      ... 
     </ResourceDictionary> 
    </Window.Resources> 

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

     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="10"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 

     <Grid Grid.Row="1"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="32"/> 
       <RowDefinition Height="370"/> <-- THIS IS HARDCODED TO 370 BUT I NEED IT TO BE RESIZABLE 
      </Grid.RowDefinitions> 

      <Grid Margin="5,0,0,0"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="4"/> 
        <ColumnDefinition Width="346*"/> 
       </Grid.ColumnDefinitions> 
       <TextBlock Text="{Binding MyName}" Grid.Column="1" 
         Style="{StaticResource MyNameStyle}" Margin="0,5,0,5" /> 

      </Grid> 

      <Border BorderBrush="{StaticResource MyBrush}" Grid.Row="1" Grid.Column="0" > 
       <ListView 
        x:Name="lstMyListView" 
        Margin="0,0,0,0" 
        BorderBrush="Transparent" 
        ItemsSource="{Binding MyItems}" 
        SelectedIndex="0" 
        ScrollViewer.CanContentScroll="True" 
        ScrollViewer.VerticalScrollBarVisibility="Auto"> 
        ... 
        ... 
       </ListView> 
       ... 
       ... 
      </Border> 
      ... 
      ... 
     </Grid> 
    </Grid> 
</Window> 

這是所有的形式,是調整大小。因此,ListView也應該調整大小,但只有在用戶調整表單大小時才應該這樣做。上面我的硬編碼值的問題很明顯,ListView不會調整大小,但會保持恆定的高度= 370。

我知道我可以將它設置爲370 *,但在這種情況下,我的List將調整大小以適合所有項目。我想限制這一點,以便只有在用戶調整窗體大小時纔會調整大小。因此,如果有更多的項目和用戶調整窗體大小時,ListView應該顯示滾動條,如果窗體的大小調整爲可以容納ListView中所有項目的高度,那麼滾動條應該消失。

UPDATE: 而不是硬編碼的高度超過370,我已經試過了高度設置爲,汽車,以及370。所有這些都會擴展ListView(因此也是表單)以適應ListView中的所有項目。

UPDATE 2: 更新了XAML以顯示整個樹結構。

更新3: 按雷切爾的建議,設置硬編碼370「*」的註釋行上面的XAML和調整,讓適合的ListView中的所有項目產生的形式。我添加了屏幕截圖,顯示打開時的窗體以及顯示打開時窗體的截圖。正如你所看到的,它調整高度以適應所有的itesm。

我需要的是窗體和ListView保持它們的集合大小,並只在用戶調整窗體大小時才調整大小。

enter image description here

+0

把370改成'*',也許只是把370用作MinHeight。 –

+0

@ChrisW。這不起作用。我嘗試過使用370 *,*和Auto。所有這些都會將表單和ListView擴展爲容納ListView中所有項目的大小。非常感謝克里斯 – pixel

+0

我可能不正確理解你的整體意圖。 370 *無效,*只需讓它消耗所提供的空間,Auto即可滿足需要。 –

回答

1

如果我正確理解你的問題,你說的表單加載太大的大小,因爲ListView正在增長到它的全高。如果是這樣,請從<Window>標籤中刪除SizeToContent="Height",因爲它使窗口的初始高度等於內容的任何高度,其中包括完整尺寸的ListView

+0

謝謝Rachel,解決了它。 – pixel

0

嗨,我想我已經理解你了。所以,我想:

所以,你希望你的的ListView至少高度370然後只調整大小如果窗口調整大小窗口的遞增和遞減尺寸)。

設置第二RowDefinition的可能了minHeight幫助

<Grid Grid.Row="1"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="32"/> 
      <RowDefinition MinHeight="370"/> <!-- THIS IS HARDCODED....--> 
     </Grid.RowDefinitions> 
..... 
</Grid> 

謝謝。

+0

對不起,這是行不通的。這只是設置MinHeight。我用一些截圖更新了我的問題來解釋。 – pixel

+1

你的說法_我需要的是窗體和ListView停留在它們的集合大小和調整大小,只有當用戶調整窗體。所以,** minheight **應該工作,** ListView **將只有370,它的大小將是當表格尺寸增加時增加,反之亦然。如果減少,_ListView_的最小高度將爲370(您的設置大小)。 – Tops

+0

@MrTop謝謝,但瑞秋的答案解決了這個問題。非常讚賞爲努力。 – pixel