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>

これは、1 ~ 4 個のダイアログを保持する構成可能なコンテナーです。このコンテナは何度も再利用され、含まれるダイアログの量は常に異なります。

要件は、ダイアログが 1 つしかない場合 (最初のグリッドだけが満たされる場合)、親グリッド全体に広がる必要があるということです。塗りつぶされた 2 つのグリッドがある場合、各コンテナーは親グリッドの半分を埋める必要があります。3つある場合...など。

どちらでも動作させることができませんでした<RowDefinition Height="Auto"/>(とにかくデフォルト) または<RowDefinition Height="*"/>. たとえば、塗りつぶされた Grid が 1 つだけの場合、親グリッド全体には収まりません。three を削除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といくつかのを作成しましたNestedCustomPanel。後者は異なる動作を提供しました。たとえば、1 つはちょうど 1 つの構成可能なコンテナーを保持するためのもので、もう 1 つは画面上に複数のコンテナーを均等に配置するためのものでした。

実行時に構成が読み取られ、追加される特定の部分が作成され、分離コードに追加されました。

この方法で、取得できる構成ごとにカスタムの動作が提供されました。これを最初の投稿で提供したコードに反映させるために、構成から利用できるコンテナーと同じくらい多くのものがRowDefinitions追加されました。

于 2013-03-03T14:37:33.330 に答える