Silverlight - 使用ListBox扩展器控制,100%高度

时间:2011-03-01 12:43:50

标签: silverlight xaml expression-blend blend

我试图将4个扩展器控件放在一个包含4行的Grid中,扩展器控件包含一个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 个答案:

答案 0 :(得分:1)

我可能会使用DockPanel而不是Grid - 对于Silverlight,您必须从Silverlight Toolkit(http://silverlight.codeplex.com)获取它 - 我知道您已经拥有它,我只是引用它档案馆。取消选中“LastChildFill”属性并将所有孩子停靠在Top。

如果没有足够的数据进行测试很难,但是如果你一次只打开一个Expander并将每个Expander的MaxHeight设置为剩余的可用空间怎么办呢?