2014-09-24 70 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