C# ScrollViewer的内容赢得';延伸
我有下面的窗口 现在,如果我试图拉下Gridsplitter,我只能在可见窗口中显示蓝色网格。但是当向下滑动拆分器时,我希望出现一个滚动条,并能够将其向下拉到底部,直到蓝色网格不再可见C# ScrollViewer的内容赢得';延伸,c#,wpf,C#,Wpf,我有下面的窗口 现在,如果我试图拉下Gridsplitter,我只能在可见窗口中显示蓝色网格。但是当向下滑动拆分器时,我希望出现一个滚动条,并能够将其向下拉到底部,直到蓝色网格不再可见 <Window.Content> <Grid> <Grid.RowDefinitions> <RowDefinition Height="25"/> <RowDefini
<Window.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition />
<RowDefinition Height="25" />
</Grid.RowDefinitions>
<Menu Name="MainMenu" Grid.Row="0">
</Menu>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<DockPanel x:Name="Green" Grid.Column="0" Width="Auto" Height="Auto">
<views:MyView></views:MyView>
</DockPanel>
<GridSplitter Grid.Column="0" Width="6"></GridSplitter>
<Grid Grid.Column="1" >
<ScrollViewer VerticalScrollBarVisibility="Auto">
<Grid VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="7" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<views:ListView x:Name="Yellow" ></views:ListView>
</Grid>
<GridSplitter Grid.Row="1" Height="7" HorizontalAlignment="Stretch" />
<Grid Grid.Row="2" >
<ContentControl Content="{Binding LoadedControl}" x:Name="Blue" />
</Grid>
</Grid>
</ScrollViewer>
</Grid>
</Grid>
<StatusBar x:Name="StatusBar" Grid.Row="2">
</StatusBar>
</Grid>
</Window.Content>
我必须在此处更改什么?如果要为拆分网格中的每个零件显示垂直滚动条,请尝试以下代码:
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<DockPanel x:Name="Green" Grid.Column="0" Width="Auto" Height="Auto" Background="#FF0CFA8F" >
<local:BusyUserControl Width="200" Height="200"/>
</DockPanel>
<GridSplitter Grid.Column="0" Width="6"></GridSplitter>
<Grid Grid.Column="1" >
<Grid VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="7" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="0" >
<Grid >
<views:ListView x:Name="Yellow" ></views:ListView>
</Grid>
</ScrollViewer>
<GridSplitter Grid.Row="1" Height="7" HorizontalAlignment="Stretch" />
<ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="2" >
<Grid Grid.Row="2" >
<ContentControl Content="{Binding LoadedControl}" x:Name="Blue" />
</Grid>
</ScrollViewer>
</Grid>
</Grid>
</Grid>
否则,请澄清您的需求希望您能找到更好的解决方案XD,因为我使用的是代码隐藏 我使用了控件GridSplitter的DragDelta事件,并放大了网格的高度,以便可以激活滚动条 xaml代码:
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<DockPanel x:Name="Green" Grid.Column="0" Width="Auto" Height="Auto" Background="#FF0CFA8F" >
<local:BusyUserControl Width="200" Height="200"/>
</DockPanel>
<GridSplitter ResizeDirection="Rows" Grid.Column="0" Width="6"></GridSplitter>
<ScrollViewer x:Name="MainScrollViewer" VerticalScrollBarVisibility="Auto" Grid.Column="1" >
<Grid x:Name="MainGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="7" />
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid >
<views:ListView x:Name="Yellow" ></views:ListView>
</Grid>
<GridSplitter Grid.Row="1" Height="7" ResizeBehavior="PreviousAndNext" HorizontalAlignment="Stretch" DragDelta="GridSplitter_DragDelta" />
<Grid Grid.Row="2">
<ContentControl Content="{Binding LoadedControl}" x:Name="Blue" />
</Grid>
</Grid>
</ScrollViewer>
</Grid>
注:
当滚动条不再可见时,我停止收缩网格(保持网格拉伸),这就是条件的含义
Visibility.Visible.Equals(MainScrollViewer.ComputedVerticalScrollBarVisibility)
希望这可以帮助您和thx解决以下问题:)将您的
滚动查看器向下移动,以便它将蓝色内容控件
包装在第2行,并确保内容控件
设置了高度
或最小高度
设置
ScrollViewer允许其子对象占据任意多的空间,并且仅当子对象大于ScrollViewer的大小时才显示滚动条
另外,作为补充说明,您可以删除布局中的一些额外网格,以使其更易于阅读。下面是一个示例,其中一组已删除,第一个已替换为DockPanel
:)
我不想为每个屏幕显示滚动条。就一个。但它当前不起作用。将您的ScrollViewer
进一步向下移动,使其将蓝色ContentControl
包装在第2行,并确保ContentControl
设置了高度或最小高度。ScrollViewer允许他们的子对象占据任意多的空间,如果子对象的大小大于ScrollViewer的大小,则会出现滚动条。@Rachel:你能在回答中说明这一点吗?它成功了。当然,它已经发布了。也说了一些类似的话,但没有真正解释,没有设置ScrollViewer
中控件的高度/最小高度。它还有一个额外的。
Visibility.Visible.Equals(MainScrollViewer.ComputedVerticalScrollBarVisibility)
<DockPanel>
<Menu Name="MainMenu" DockPanel.Dock="Top" Height="25" />
<StatusBar x:Name="StatusBar" DockPanel.Dock="Bottom" Height="25"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="6" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<views:MyView x:Name="Green" Grid.Column="0" />
<GridSplitter Grid.Column="1" Width="6" />
<Grid Grid.Column="2" >
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="7" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<views:ListView x:Name="Yellow" Grid.Row="0" />
<GridSplitter Grid.Row="1" Height="7" HorizontalAlignment="Stretch" />
<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
<ContentControl x:Name="Blue" MinHeight="400"/>
</ScrollViewer>
</Grid>
</Grid>
</DockPanel>