2016-06-03 2 views
1

У меня проблема с ScrollViewer в WPF.Проблема с WPF ScrollViewer resize

Когда Окно размером до точки, где ScrollViewer должен начать принимать, окно не изменяет размер сетки, а нижняя часть полосы прокрутки просто выходит из вида.

Я попытался привязать его высоту к высоте содержащей сетки, но не повезло.

Вот моя XAML:

<Grid x:Name="MainGrid" Width="Auto" Height ="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <StackPanel Height="134" Width="Auto" VerticalAlignment="Top" Background="Blue" HorizontalAlignment="Stretch"> 
     <Label x:Name="ProjectNumberLabel" Content="ProjectNumber" HorizontalAlignment="Left" Height="45.5" VerticalAlignment="Top" Width="350" FontSize="32" Margin="10,0,0,0" Foreground="White"/> 

     <Label x:Name="ProjectNameLabel" Content="ProjectName" HorizontalAlignment="Stretch" Height="42" VerticalAlignment="Top" FontSize="24" Margin="10,0,0,0" Foreground="White" Width="auto"/> 

     <Label x:Name="SetLabel" Content="Set Id" HorizontalAlignment="Stretch" Width="Auto" Height="42" Margin="10,0,10,0" FontSize="24" VerticalAlignment="Top" Foreground="White" /> 

    </StackPanel> 

    <ScrollViewer HorizontalAlignment="Stretch" Margin="0,140,0,0" Width="Auto" CanContentScroll="True" Height="{Binding ElementName=MainGrid, Path=ActualHeight }"> 
     <StackPanel Name="ContainingPanel" VerticalAlignment="Top" HorizontalAlignment="Stretch" Width="Auto" Height="Auto"> 
      <StackPanel HorizontalAlignment="Stretch" Width="Auto" Height="300"/> 

      <StackPanel HorizontalAlignment="Stretch" Height="38" VerticalAlignment="Bottom"> 
       <CheckBox x:Name="ComplexDataCheckBox" Content="Show All Data" Click="ComplexDataCheckBox_Click" RenderTransformOrigin="1.751,0.547" Margin="0,4,0,0" Height="16" HorizontalAlignment="Right" Width="105" VerticalAlignment="Bottom"> 
        <CheckBox.LayoutTransform> 
         <ScaleTransform ScaleX="2" ScaleY="2" /> 
        </CheckBox.LayoutTransform> 
       </CheckBox> 
      </StackPanel> 

      <StackPanel HorizontalAlignment="Stretch"> 
         <syncfusion:SfDataGrid HorizontalAlignment="Stretch" Width="Auto" VerticalAlignment="Stretch" x:Name="SpecimenGrid" AutoGenerateColumns="True" RowStyleSelector="{StaticResource styleselector}"/> 
      </StackPanel> 

     </StackPanel> 
    </ScrollViewer> 
</Grid> 
+0

Видя, как вы размещения ваших компонентов, внешняя сетка бесполезно, 'DockPanel' бы beeen достаточно. Чтобы поместить другие элементы управления в Grid, вы должны определить 'ColumnDefinitions' и' RowDefinitions'. Что касается 'ScrollViewer', не определяйте его высоту, а определяйте' VerticalAlignement' для растягивания. Полоса прокрутки появится после того, как содержимое больше не поместится – Sidewinder94

ответ

4

если ScrollViewer имеет высоту, равную высоту сетки и не нулевые вертикальные краев, он выходит из сетки границ.

лучше поставить StackPanel и ScrollViewer в двух отдельных грид Ряды:

<Grid x:Name="MainGrid"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="140"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <StackPanel Grid.Row="0"> 
     <!--Content--> 
    </StackPanel> 

    <ScrollViewer Grid.Row="1" 
        HorizontalAlignment="Stretch" 
        Margin="0" 
        CanContentScroll="True" > 
     <!--Content--> 
    </ScrollViewer> 
</Grid> 
+0

Я пробовал то, что вы предложили, и он швы, как высота ScrollViewer хочет по-прежнему соответствовать тому, что есть в содержимом, а не в контейнере Grid Row, в котором он находится. – laxin204

+0

Не обращайте на это внимание вещи содержались внутри другого StackPanel, меняли это на сетку, и проблема теперь исправлена. Большое спасибо за Вашу помощь – laxin204