Использовать ScrollViewer внутри другого Scrollviewer - PullRequest
4 голосов
/ 28 сентября 2011

Структура моего wpf-приложения выглядит следующим образом:

<Scrollviewer>
   <Grid>
       <Scrollviewer>
            <DataGrid>

Моя цель - если DataGrid превышает высоту экрана, чтобы использовать свой собственный Scrollviewer. В данный момент используется только внешний ScrollViewer, поэтому мне нужно прокрутить всю сетку.

Может кто-нибудь сказать, пожалуйста, как это сделать?

Ответы [ 2 ]

10 голосов
/ 28 сентября 2011

Вам нужно установить высоту на внутреннем ScrollViewer, иначе он будет растягиваться столько, сколько нужно, в зависимости от размера его контента.

<Window x:Name="RootWindow">
    <ScrollViewer>
        <Grid Height="{Binding ElementName=RootWindow, Path=ActualHeight}">
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="2*" />
            </Grid.RowDefinitions>

            <ScrollViewer Grid.Row="1">
                <DataGrid />
            </ScrollViewer>
        </Grid>
    </ScrollViewer>
</Window>

Кроме того, DataGrid имеет встроенные свойства для своих собственных полос прокрутки, которые вы можете использовать вместо переноса DataGrid в ScrollViewer. Это прокручивает данные и всегда оставляет заголовки видимыми, а не прокручивает всю сетку данных.

<DataGrid HorizontalScrollBarVisibility="Auto" 
          VerticalScrollBarVisibility="Auto" />
1 голос
/ 28 сентября 2011

Тогда вы можете разместить DataGrid вне Scrollviewer.Поэтому вы можете установить два Grid.Rows и позволить ему разделить доступный для вас размер (по умолчанию будет «равно» или если вы используете только две строки, 50% -50%).Поэтому, если DataGrid превышает свой доступный размер, он будет использовать свой собственный ScrollViewer.Если содержание ниже превышает размер, он будет использовать ваш ScrollViewer вручную.По крайней мере, так я бы решил это на основе вашего первоначального вклада.Не стесняйтесь добавлять код / ​​комментарии, чтобы мы могли найти лучший способ.

Если вы поместите два ScrollViewers и сетку данных друг в друга, вы будете вынуждены начать раздавать конкретные значения высоты или ширины, если вы хотите такого родамелкозернистого контроля.

...