Silverlight - управление экспандером с помощью ListBox, высота 100% - PullRequest
2 голосов
/ 01 марта 2011

Я пытаюсь поместить 4 элемента управления экспандером в Grid с 4 строками, элемент управления Expander содержит Grid и ListBox (в настоящее время содержит некоторые примеры данных).

В идеале, когда расширитель расширяется, я хочу, чтобы он заполнил все доступное пространство, не отталкивая оставшиеся расширители за пределы экрана или окно со списком, уходящее за пределы экрана. Может кто-нибудь придумать способ адаптации XAML ниже или обновления XAML ниже для достижения этого?

    <Grid x:Name="LayoutRoot" Background="White" DataContext="{Binding Source={StaticResource ExpanderData}}">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="0.246*"/>
                <RowDefinition Height="0.754*"/>
            </Grid.RowDefinitions>
            <Grid Margin="0" Grid.Row="1">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="0.275*"/>
                    <ColumnDefinition Width="0.725*"/>
                </Grid.ColumnDefinitions>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <toolkit:Expander x:Name="Expander1" Header="One" IsExpanded="False">
                        <Grid Background="#FFE5E5E5">
                            <ListBox Margin="0" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding Collection}"/>
                        </Grid>
                    </toolkit:Expander>
                    <toolkit:Expander x:Name="Expander2" Header="Two" IsExpanded="True" VerticalAlignment="Top" Grid.Row="1">
                        <Grid Background="#FFE5E5E5">
                            <ListBox Margin="0" ItemTemplate="{StaticResource ItemTemplate1}" ItemsSource="{Binding Collection}"/>
                        </Grid>
                    </toolkit:Expander>
                    <toolkit:Expander x:Name="Expander3" Header="Three" VerticalAlignment="Top" Grid.Row="2" IsExpanded="False">
                        <Grid Background="#FFE5E5E5">
                            <ListBox Margin="0" ItemTemplate="{StaticResource ItemTemplate2}" ItemsSource="{Binding Collection}"/>
                        </Grid>
                    </toolkit:Expander>
                    <toolkit:Expander x:Name="Expander4" Header="Four" VerticalAlignment="Top" Grid.Row="3" IsExpanded="False">
                        <Grid Background="#FFE5E5E5">
                            <ListBox Margin="0" ItemTemplate="{StaticResource ItemTemplate3}" ItemsSource="{Binding Collection}"/>
                        </Grid>
                    </toolkit:Expander>
                </Grid>
            </Grid>
        </Grid>
    </Grid>
</UserControl>

1 Ответ

1 голос
/ 17 марта 2011

Я бы, вероятно, использовал DockPanel вместо Grid - для Silverlight вы должны получить его из набора инструментов Silverlight (http://silverlight.codeplex.com) - я знаю, что у вас уже есть, я просто ссылаюсь на него для архивы. Снимите флажок со свойства «LastChildFill» и поместите всех детей в Top.

Трудно протестировать без адекватных данных, но что если вы просто открыли по одному Расширителю за раз и установили MaxHeight каждого Расширителя на оставшееся доступное пространство?

...