Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ScrollViewer的内容赢得';延伸_C#_Wpf - Fatal编程技术网

C# ScrollViewer的内容赢得';延伸

C# ScrollViewer的内容赢得';延伸,c#,wpf,C#,Wpf,我有下面的窗口 现在,如果我试图拉下Gridsplitter,我只能在可见窗口中显示蓝色网格。但是当向下滑动拆分器时,我希望出现一个滚动条,并能够将其向下拉到底部,直到蓝色网格不再可见 <Window.Content> <Grid> <Grid.RowDefinitions> <RowDefinition Height="25"/> <RowDefini

我有下面的窗口

现在,如果我试图拉下Gridsplitter,我只能在可见窗口中显示蓝色网格。但是当向下滑动拆分器时,我希望出现一个滚动条,并能够将其向下拉到底部,直到蓝色网格不再可见

<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>