Вложенные средства просмотра прокрутки с сетками данных

У меня есть окно со следующим содержимым:

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

Моя цель - сделать следующее: если ширина содержимого окна меньше ширины окна - должна появиться внешняя горизонтальная полоса прокрутки. Если я увеличу ширину столбца сетки данных - должна появиться только горизонтальная полоса прокрутки для этой сетки данных.

Что меня блокирует:

Когда я увеличиваю ширину столбца сетки данных, он изменяет размер своей сетки данных и появляется горизонтальная полоса прокрутки «Outer» вместо «Inner1», которая остается неактивной.

На самом деле в моем приложении есть окно с управлением кадром. Фрейм загружает страницу с пользовательским содержимым, а размер страницы может быть больше размера окна. Управление кадром обернуто ScrollViewer. Страница содержит несколько DataGrid, обернутых средствами просмотра прокрутки, чтобы отображать горизонтальную полосу прокрутки при изменении ширины столбца, даже если в сетке данных нет строк. Поэтому, когда я увеличиваю ширину столбца datagrid, он изменяет размер datagrid -> datagrid изменяет размер всей страницы -> scrollviewer, в котором появляется кадр обертки. Можно ли отключить изменение размера сетки данных при изменении ширины столбца?


person Refraction    schedule 14.08.2013    source источник


Ответы (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>
person Eric Bowser    schedule 22.07.2015