3
  • 背景コンテナとしてグリッドがあります
  • このグリッドにはscrollviewerが含まれているため、ウィンドウを上にサイズ変更するとコンテンツも一緒に拡張されますが、ウィンドウを下にサイズ変更すると、svのコンテンツのminWidthに到達するとスクロールバーがscrollviewerに表示されます
  • このscrollviewerには、2列のグリッドが含まれています
  • このグリッドには、各列に1つのscrollviewerが含まれ、各列にはグリッドが含まれます。
  • 最初の列にグリッドスプリッターがあるので、列のサイズを変更できます

免責事項:これはこのレイアウトを整理するための最適な方法ではないことはわかっていますが、これは実際には、はるかに複雑なレイアウトで発生した問題を再現するために見つけた最も単純な表現であるため、レイヤーを再編成するソリューションを提供しないでください

これがxamlです:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Text Project">

    <!--background grid-->
    <Grid>

        <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">

            <!--two columns layout-->
            <Grid MinWidth="600">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>

                <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid MinWidth="200" Background="Red"/>
                </ScrollViewer>

                <GridSplitter HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="6"/>

                <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid MinWidth="200" Background="Blue"/>
                </ScrollViewer>
            </Grid>

        </ScrollViewer>

    </Grid>

</Window>

目標は次のとおりです。-ウィンドウのサイズを上に変更すると、すべてが拡大縮小されます-サイズを下に変更すると、minWidthに到達すると、最上部のスクロールビューアのスクロールバーが表示され、コンテンツの縮小が停止します。(この部分は正常に機能します)-一番上のscrollviewerのサイズに関係なく、gridsplitterを使用して両方の列のサイズを変更できます-1つの列の最小幅に達すると、この列のscrollviewerにスクロールバーが表示され、そのコンテンツの縮小が停止します

問題:この2番目の部分は決して起こりません。2つの子グリッドのminWidthのいずれかに到達するまでサイズを変更できます。その後、gridsplitterの移動が停止し、それ以上縮小できず、スクロールバーが表示されません。

一番上のグリッドとそれに関連するscrollviewerを削除すると、期待どおりに機能することに気付きました。

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Text Project">

            <!--two columns layout-->
            <Grid MinWidth="600">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>

                <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid MinWidth="200" Background="Red"/>
                </ScrollViewer>

                <GridSplitter HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="6"/>

                <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid MinWidth="200" Background="Blue"/>
                </ScrollViewer>
            </Grid>

</Window>

内側のグリッドをスクロールビューアーに配置したことで、グリッドスプリッターと内側のスクロールビューアーの動作が変わる理由がわかりません。解決策を知っている人は誰でも、喜んでいます。

4

1 に答える 1

7

Width次のように、2つの列のを外側Gridのにバインドしてみてください。ActualWidthScrollViewer

<!--two columns layout-->
<Grid MinWidth="600" Width="{Binding RelativeSource={RelativeSource AncestorType=ScrollViewer}, Path=ActualWidth}">
于 2013-03-12T11:33:19.583 に答える