3

我有以下 XAML(简化):

<Grid x:Name="parentGrid">
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>

    <Grid Grid.Row="0">
        <!-- content which fits its parent grid -->
    </Grid>

    <Grid Grid.Row="1">
        <!-- content which fits its parent grid -->
    </Grid>

    <Grid Grid.Row="2">
        <!-- content which fits its parent grid -->
    </Grid>

    <Grid Grid.Row="3">
        <!-- content which fits its parent grid -->
    </Grid>
</Grid>

这是一个可配置的容器,它包含一到四个我们的对话框。这个容器被重用了很多,包含的对话框的数量总是不同的。

要求是,如果只有一个对话框(所以只有第一个网格被填充),它应该延伸到整个父网格。如果填充了两个网格,则每个容器应填充父网格的一半。如果有三个......等等。

我无法使用它<RowDefinition Height="Auto"/>(无论如何默认)和<RowDefinition Height="*"/>. 例如,如果只有一个 Grid 填充,它不适合整个父网格。如果我删除三个RowDefinitions,它虽然有效。

附加信息:未填充的网格可见性始终设置为Visibility.Collapsed

4

2 回答 2

0

我总是发现,如果你想隐藏一个列或行,你可以像这样绑定一个属性:

<Grid x:Name="ParentGrid">
    <Grid.RowDefinitions>
        <RowDefinition Height="{Binding GridRow0}" />
        <RowDefinition Height="{Binding GridRow1}" />
        <RowDefinition Height="{Binding GridRow2}" />
        <RowDefinition Height="{Binding GridRow3}" />
    </Grid.RowDefinitions>
<-- grid contents -->
</Grid>

设置如下属性:

Public Property GridRow0 as GridLength = New GridLength(GridUnitType.Star)
Public Property GridRow1 as GridLength = New GridLength(GridUnitType.Star)
Public Property GridRow2 as GridLength = New GridLength(GridUnitType.Star)
Public Property GridRow3 as GridLength = New GridLength(GridUnitType.Star)

然后,当您确定需要多少行时,您可以执行类似将计数传递给过程的操作:

Public Sub FixRows(count as Integer)
    Select Case count
        Case 1
            GridRow3 = New GridLength(0)
            GridRow2 = New GridLength(0)
            GridRow1 = New GridLength(0)
            GridRow0 = New GridLength(GridUnitType.Star)
        Case 2
            GridRow3 = New GridLength(0)
            GridRow2 = New GridLength(0)
            GridRow1 = New GridLength(GridUnitType.Star)
            GridRow0 = New GridLength(GridUnitType.Star)
        Case 3
            GridRow3 = New GridLength(0)
            GridRow2 = New GridLength(GridUnitType.Star)
            GridRow1 = New GridLength(GridUnitType.Star)
            GridRow0 = New GridLength(GridUnitType.Star)
        Case 4
            GridRow3 = New GridLength(GridUnitType.Star)
            GridRow2 = New GridLength(GridUnitType.Star)
            GridRow1 = New GridLength(GridUnitType.Star)
            GridRow0 = New GridLength(GridUnitType.Star)
        Case Else
            'Whatever is needed
    End Select
End Sub
于 2012-10-29T17:19:07.847 回答
0

我最终创建了一个CustomPanel和几个NestedCustomPanels。后者提供了不同的行为,例如,一个只是用来容纳一个可配置的容器,另一个是在屏幕上均匀地排列多个容器。

在运行时读取配置并在后面的代码中创建和添加要添加的某些部分。

这种方式为我可以获得的每个可能的配置提供了自定义行为。为了将这一点反映在我在开始文章中提供的代码中:RowDefinitions添加的内容与配置中可用的容器一样多。

于 2013-03-03T14:37:33.330 回答