带有数据网格的嵌套滚动查看器

时间:2013-08-14 14:13:54

标签: wpf datagrid scrollviewer

我有下一个内容的窗口:

<Grid>
    <ScrollViewer x:Name="Outer" CanContentScroll="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="2*" />
            </Grid.RowDefinitions>
            <ScrollViewer x:Name="Inner1" CanContentScroll="True" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto">
                <DataGrid HorizontalAlignment="Stretch" MinWidth="700" >
                    <DataGrid.Columns>
                        <DataGridCheckBoxColumn Header="Column A" />
                        <DataGridCheckBoxColumn Header="Column B" />
                    </DataGrid.Columns>
                </DataGrid>
            </ScrollViewer>
            <TextBox Width="500" Grid.Row="1" HorizontalAlignment="Left"/>
            <ScrollViewer x:Name="Inner2" Grid.Row="1" CanContentScroll="True" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto">
                <DataGrid HorizontalAlignment="Stretch" >
                    <DataGrid.Columns>
                        <DataGridCheckBoxColumn Header="Column С" />
                        <DataGridCheckBoxColumn Header="Column В" />
                    </DataGrid.Columns>
                </DataGrid>
            </ScrollViewer>
        </Grid>
    </ScrollViewer>
</Grid>

我的目标是下一步: 如果窗口内容宽度小于窗口宽度 - 应出现外部水平滚动条。如果我增加datagrid列宽 - 只应出现此数据网格的水平滚动条。

阻止我的是什么:

当我增加datagrid列宽时 - 它会调整其数据网格的大小并显示“外部”水平滚动条而不是“ Inner1 ”保持不活动状态。

事实上,在我的应用程序中,我有一个框架控制窗口。框架加载具有自定义内容的页面,页面大小可能大于窗口大小。帧控件包含ScrollViewer。页面包含一些包含滚动查看器的DataGrids,以便在更改列宽时显示水平滚动条,即使datagrid中没有行也是如此。 因此,当我增加datagrid列宽时,它会调整datagrid的大小 - &gt; datagrid调整整个页面的大小 - &gt;出现了包裹框架的scrollviewer。 是否可以在更改列宽时禁用datagrid调整大小?

1 个答案:

答案 0 :(得分:-1)

似乎因为它们嵌套在同一网格行中,所以它们都使用顶级滚动查看器。这是一个修复,但不确定它是否是您想要的。

  <Window x:Class="NestedScrollViewer.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <ScrollViewer x:Name="Outer" CanContentScroll="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
            <Grid>
                <DataGrid HorizontalAlignment="Stretch" >
                    <DataGrid.Columns>
                        <DataGridCheckBoxColumn Header="Column A" />
                        <DataGridCheckBoxColumn Header="Column B" />
                    </DataGrid.Columns>
                </DataGrid>
            </Grid>
        </ScrollViewer>
        <ScrollViewer x:Name="Inner2" Grid.Row="1" CanContentScroll="false" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto">
            <Grid>
                <DataGrid HorizontalAlignment="Stretch" >
                    <DataGrid.Columns>
                        <DataGridCheckBoxColumn Header="Column С" />
                        <DataGridCheckBoxColumn Header="Column В" />
                    </DataGrid.Columns>
                </DataGrid>
            </Grid>
        </ScrollViewer>
    </Grid>
</Window>