2013-08-06 3 views
0

У меня есть UserControl, который содержит ScrollViewer.Прокрутки полосы прокрутки Xaml ScrollViewer не отображаются

<UserControl> 
    <ScrollViewer Name="ScrollContainerScroller" 
        VerticalScrollBarVisibility="Auto" 
        HorizontalScrollBarVisibility="Hidden"> 
     <ListBox Name="MyItemsListBox" ItemsSource="{Binding MyItems}"/> 
    </ScrollViewer> 
</UserControl> 

При потреблении этого UserControl внутри StackPanel скроллбары в ScrollViewer в не показаны.

<Border> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> <!-- top --> 
      <RowDefinition Height="*"/> <!-- content --> 
      <RowDefinition Height="Auto"/> <!-- bottom --> 
     </Grid.RowDefinitions> 

     <StackPanel Grid.Row="1" VerticalAlignment="Top"> 
      <Grid Name="ContentButtons" Height="20"> 
       <Button Name="MinimizeContent"/> 
       <Button Name="MaximizeContent"/> 
      </Grid> 
      <ContentControl Name="MyContent"/> 
     </StackPanel> 

     <!-- 
     <ContentControl Name="MyContent" Grid.Row="1" VerticalAlignment="Top"/> 
     --> 

     <Grid Name="MyBottomControls" Grid.Row="2" VerticalAlignment="Bottom"> 
       <Button Name="Delete" HorizontalAlignment="Left" Style="{StaticResource DeleteButtonStyle}"/> 
       <Button Name="Close" HorizontalAlignment="Center" Style="{StaticResource CloseButtonStyle}"/> 
       <Button Name="Hide" HorizontalAlignment="Right" Style="{StaticResource HideButtonStyle}"/> 
     </Grid> 

     <!-- shows up at last so the Grid can place it at the very top it in the Z axis --> 
     <ContentControl Name="MyTop" Grid.Row="0" VerticalAlignment="Top"/> 
    </Grid> 
</Border> 

Когда я удаляю упаковочную стеклянную панель, scrollviewer отображается правильно.

Что мне нужно сделать для того, чтобы полосы прокрутки также работали с дополнительной панелью стека, которая обертывает MyContent-contentcontrol?

+1

Используйте Grid или DockPanel вместо StackPanel. Но зачем вам этот обертку? – LPL

+1

На самом деле я забыл, что в этой панели стека есть дополнительные элементы управления, которые должны быть размещены над контентом contentcontrol. Я отредактировал это, чтобы сделать его более понятным. –

ответ

3

Размер StackPanel не вычисляет максимальную высоту или ширину, что может вызвать появление полос прокрутки. Вместо этого вы должны использовать Grid и выровнять элементы.

<Border> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> <!-- top --> 
      <RowDefinition Height="*"/> <!-- content --> 
      <RowDefinition Height="Auto"/> <!-- bottom --> 
     </Grid.RowDefinitions> 

     <Grid Grid.Row="1" VerticalAlignment="Top"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="*"/>  
      </Grid.RowDefinitions> 
      <Grid Name="ContentButtons" Height="20"> 
       <Button Name="MinimizeContent"/> 
       <Button Name="MaximizeContent"/> 
      </Grid> 
      <ContentControl Grid.Row="1" Name="MyContent"/> 
     </Grid > 

     <!-- 
     <ContentControl Name="MyContent" Grid.Row="1" VerticalAlignment="Top"/> 
     --> 

     <Grid Name="MyBottomControls" Grid.Row="2" VerticalAlignment="Bottom"> 
       <Button Name="Delete" HorizontalAlignment="Left" Style="{StaticResource DeleteButtonStyle}"/> 
       <Button Name="Close" HorizontalAlignment="Center" Style="{StaticResource CloseButtonStyle}"/> 
       <Button Name="Hide" HorizontalAlignment="Right" Style="{StaticResource HideButtonStyle}"/> 
     </Grid> 

     <!-- shows up at last so the Grid can place it at the very top it in the Z axis --> 
     <ContentControl Name="MyTop" Grid.Row="0" VerticalAlignment="Top"/> 
    </Grid> 
</Border> 
Смежные вопросы