4

我有下一个内容的窗口:

<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 的大小并且出现“ Outer ”水平滚动条,而不是保持非活动状态的“ Inner1 ”。

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

4

1 回答 1

-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>
于 2015-07-22T15:54:42.277 回答