将画布包装到网格中时丢失画布滚动条

时间:2016-04-25 09:51:16

标签: wpf xaml canvas grid

WPF应用程序中会出现此问题。

该项目正在使用ContentControl加载Canvas并在此画布中绘制任何需要绘制的内容。 此画布具有垂直和水平滚动条。

现在我需要将此ContentControl包装到GroupBox旁边的网格中。

所以我换了:

 <ContentControl Grid.Row="1" Content="{Binding Viewer.Content}" Margin="10,10,0,0"/>

使用:

<Grid Grid.Row="1" x:Name="Load_Grid" Panel.ZIndex="2" Background="DarkGray" Opacity="0.9">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <GroupBox Grid.Column="0" 
              x:Name="Legend_Inserts_Status"
              Header="Legend"
              HorizontalAlignment="Left"
              BorderBrush="#FF4EA8DE"
              FontSize="10"
              Foreground="#FF436EFF"
              Width="80"
              Visibility="{Binding DisplayLegend,Converter={StaticResource BoolToVis}}">
        <Grid>
            <!--My groupbox content here -->
        </Grid>
    </GroupBox>
    <ContentControl Grid.Column="1" Content="{Binding Viewer.Content}" Margin="10,10,0,0"/>
</Grid>

执行此操作时,我的新GroupBox正确呈现,画布仍然显示但没有水平和垂直滚动条。 有什么理由吗?

实际上,即使我对GroupBox发表评论,也会删除滚动条。因此,删除滚动条似乎是将ContentControl包装到网格中。

1 个答案:

答案 0 :(得分:1)

这是因为您将列设置为Auto Width,根据定义,该列允许该列的子节点占用列内容所需的任何空间和大小。

通过这样做,你可以否定任何边界来调用ScrollViewer模板中内置的ContentControl。基本上是因为它没有任何说法“嘿!你只能被允许x,y尺寸,如果你超过这个尺寸,那么我们需要滚动条。”是一种简单的方式。因此,您需要设置MaxWidth或使用*或其他会调用ScrollViewer边界的内容。