3

できれば純粋なXAMLで以下を解決したいのですが、無理なら教えてください。私も C# ソリューションを持っていないので、それを利用する必要がある場合は、適切なパスを送ってください。

以下では、2 列のグリッドがあります。左の列は、動的コンテンツを含むスクロール ビューアーです。右側の列は、動的コンテンツを含むスタックパネルです。右の列のコンテンツで親グリッドと左の列の高さを制御したい - つまり、右の列をマスターにしたい。右側の列には 3 つの項目がある場合もあれば、10 項目がある場合もあります。項目が 3 つしかない場合は、グリッド全体の高さを短くし、左側のスクロール ビューアーのコンテンツをスクロールする必要があります。左スクロールビューアーには 100 個のアイテムがある可能性があるため、そのアイテムで高さを制御することはできません。

サンプルコードは次のとおりです。

    <Grid x:Name="grd_Parent" Background="#FFF4E9FF">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
        <ScrollViewer x:Name="Left" Grid.Column="0">
            <!-- This side should scale (and scroll) to the height of the right column-->
            <StackPanel VerticalAlignment="Top">
                <Rectangle Height="50" Fill="Red"/>
                <Rectangle Height="50" Fill="Blue"/>
                <Rectangle Height="50" Fill="Black"/>
                <Rectangle Height="50" Fill="Brown"/>
                <Rectangle Height="50" Fill="Purple"/>
                <Rectangle Height="50" Fill="DarkGreen"/>
                <Rectangle Height="50" Fill="Violet"/>
                <Rectangle Height="50" Fill="Wheat"/>
                <Rectangle Height="50" Fill="DarkCyan"/>
                <Rectangle Height="50" Fill="DarkGray"/>
                <Rectangle Height="50" Fill="DarkOrange"/>
            </StackPanel>
        </ScrollViewer>
        <StackPanel x:Name="Right" Grid.Column="1" VerticalAlignment="Top">
            <!-- This content is dynamic as well, but height of this should be the height of the parent grid -->
            <TextBlock Height="50" Text="This"/>
            <TextBlock Height="50" Text="Side"/>
            <TextBlock Height="50" Text="Should"/>
            <TextBlock Height="50" Text="Determine"/>
            <TextBlock Height="50" Text="The"/>
            <TextBlock Height="50" Text="Height"/>
            <TextBlock Height="50" Text="Of"/>
            <TextBlock Height="50" Text="Parent"/>
        </StackPanel>
    </Grid>

存在するサンプルのスクリーンショットを次に示します。 サンプルアプリ

これは、私が望んでいるもののスクリーンショットです。 サンプルアプリ正解

事前にありがとう、ビームス

4

1 に答える 1

4

これを試して、うまくいくかどうか教えてください。以下の変更により、ScrollViewer が StackPanel の ActualHeight にバインドされます。このように、StackPanel よりも大きくなることはありません。

<Grid x:Name="grd_Parent" Background="#FFF4E9FF">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <ScrollViewer x:Name="Left" Height="{Binding ElementName=Right, Path=ActualHeight}" Grid.Column="0">
        <!-- This side should scale (and scroll) to the height of the right column-->
        <StackPanel VerticalAlignment="Top">
            <Rectangle Height="50" Fill="Red"/>
            <Rectangle Height="50" Fill="Blue"/>
            <Rectangle Height="50" Fill="Black"/>
            <Rectangle Height="50" Fill="Brown"/>
            <Rectangle Height="50" Fill="Purple"/>
            <Rectangle Height="50" Fill="DarkGreen"/>
            <Rectangle Height="50" Fill="Violet"/>
            <Rectangle Height="50" Fill="Wheat"/>
            <Rectangle Height="50" Fill="DarkCyan"/>
            <Rectangle Height="50" Fill="DarkGray"/>
            <Rectangle Height="50" Fill="DarkOrange"/>
        </StackPanel>
    </ScrollViewer>
    <StackPanel x:Name="Right" Grid.Column="1" VerticalAlignment="Top">
        <!-- This content is dynamic as well, but height of this should be the height of the parent grid -->
        <TextBlock Height="50" Text="This"/>
        <TextBlock Height="50" Text="Side"/>
        <TextBlock Height="50" Text="Should"/>
        <TextBlock Height="50" Text="Determine"/>
        <TextBlock Height="50" Text="The"/>
        <TextBlock Height="50" Text="Height"/>
        <TextBlock Height="50" Text="Of"/>
        <TextBlock Height="50" Text="Parent"/>
    </StackPanel>
</Grid>
于 2012-12-13T20:34:11.627 に答える