Прокручиваемая сетка в WPF / Silverlight - PullRequest
1 голос
/ 27 апреля 2010

Я хотел бы построить окно WPF, которое использует внешнюю сетку , чтобы разделить экран на 4 части . В правом нижнем квадранте я бы хотел внедрить другую сетку, которая больше, чем ячейка сетки . Я искал способы добавить ScrollViewer (или использовать свойства Grid.ScrollViewer), но независимо от того, что я пытаюсь , внутренняя сетка не изменяет размер или не отображает полосы прокрутки соответствующим образом .

Я подозреваю, что это как-то связано с тем, что не оборачивает внутреннюю сетку правильной панелью с соответствующим поведением размера (и изменения размера) , что заставит внутреннюю сетку учитывать полосы прокрутки, а не просто отображать слишком большой (и обрезается другим окном).

Окно хостинга определено так:

<Window x:Class="GridScrollTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:GridScrollTest"
        Title="MainWindow" Height="350" Width="525">
    <Grid x:Name="OuterGrid">
        <Grid.RowDefinitions>
            <RowDefinition Height="100" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <local:SSControl x:Name="Sheet" 
                         Grid.Row="1" Grid.Column="1"
                         HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Yellow" />
        <Canvas Grid.Row="0" Grid.Column="0" Background="LightGreen" />
        <Canvas Grid.Row="1" Grid.Column="0" Background="LightBlue" />
        <Canvas Grid.Row="0" Grid.Column="1" Background="LightCoral" />
    </Grid>
</Window>

И SSControl, на который ссылаются:

<UserControl x:Class="GridScrollTest.SSControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    Height="270" Width="600">
    <ScrollViewer 
        HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
        CanContentScroll="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Grid x:Name="CellGrid" ShowGridLines="False" 
              >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="30"  />
                <RowDefinition Height="30"  />
                <RowDefinition Height="30"  />
                <RowDefinition Height="30"  />
                <RowDefinition Height="30"  />
                <RowDefinition Height="30"  />
                <RowDefinition Height="30"  />
                <RowDefinition Height="30"  />
                <RowDefinition Height="30"  />
                <RowDefinition Height="30"  />
                <RowDefinition Height="30"  />
                <RowDefinition Height="30"  />
            </Grid.RowDefinitions>
        </Grid>
    </ScrollViewer>
</UserControl>

1 Ответ

3 голосов
/ 27 апреля 2010

Я не знаю наверняка, но после того, как попробовал ваш код в Blend, я думаю, что ваша проблема может быть в том, что вы установили ColumnDefinition.Width и RowDefinition.Height на Auto. Попробуйте установить их на * и удалите Height=270 и Width=600 для вашего пользовательского контроля. Таким образом, внешняя сетка заполняет все доступное пространство в окне, а нижняя правая ячейка имеет полосы прокрутки.

...