2016-12-29 84 views
1

我不知道如何把元素放在列表框下面。列表框应该占据整个屏幕。把项目放在列表框

<StackPanel> 
    <ListBox> 
     <ListBoxItem>//Elements from ViewModel</ListBoxItem> 
    </ListBox> 
    <TextBlock>Additional elment</TextBlock> 
</StackPanel> 

但滚动不工作。我无法分配高,因为它是未知

我想有以下结果: enter image description here

回答

1

例如,你可以使用一个DockPanel中:

<DockPanel> 
    <TextBlock DockPanel.Dock="Bottom">Additional element</TextBlock> 
    <ListBox> 
     <ListBoxItem>//Elements from ViewModel</ListBoxItem> 
    </ListBox> 
</DockPanel> 

的最后一个元素的DockPanel中,即ListBox在这种情况下将填充剩余空间,除非您将DockPanel的LastChildFill属性设置为false:https://msdn.microsoft.com/en-us/library/system.windows.controls.dockpanel.lastchildfill(v=vs.110).aspx

StackPanels对于scrollba不能很好地工作RS。有关这方面的更多信息,请参阅我对以下问题的回答。

Horizontal scroll for stackpanel doesn't work

您的解决方案将让更多的元素将在窗口的底部,不低于在列表框中的最后一个项目。我的问题是不同的。

使用网格则:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <ListBox Grid.Row="0" /> 
    <TextBlock Grid.Row="1">Additional element</TextBlock> 
    <!-- Grid.Row="2" = the rest of the window content... --> 
</Grid> 

我希望更多的元素,其余滚动 - 这是一个按钮

使用CompositeCollection作为的ItemsSource为ListBox那么,而不是直接绑定到您的源属性:

<ListBox> 
    <ListBox.Resources> 
     <CollectionViewSource x:Key="itemsSource" Source="{Binding YourViewModelSourceCollection}" /> 
    </ListBox.Resources> 
    <ListBox.ItemsSource> 
     <CompositeCollection> 
      <CollectionContainer Collection="{Binding Source={StaticResource itemsSource}}" /> 
      <TextBlock>Additional element</TextBlock> 
     </CompositeCollection> 
    </ListBox.ItemsSource> 
</ListBox> 
+0

您的解决方案将使额外的元素将在窗口的底部,而不是在列表框的最后一项之下。我的问题是不同的。 – WymyslonyNick

+0

你的意思是说你想把附加元素*置于ListBox中?然后你应该添加另一个对象到ListBox本身。如果你想把这个元素放在ListBox下面,你也可以使用Grid。我编辑了我的答案。 – mm8

+0

我不想在列表中添加额外的元素 - 但我想要一个额外的元素以这种方式表现。 您的网格解决方案将使任何滚动不可见。 – WymyslonyNick