9

ページの左側に、次の要素を持つ垂直 StackPanel があります。

  • 1 テキストブロック
  • 利用可能なスペースを埋める複数の要素を持つ 1 つの垂直 StackPanel

ScrollViewer要素を使用して 2 番目のStackPanel をスクロール可能にしようとしていますが、成功しません。ScrollViewer Height を何らかの値に定義すると機能しますが、利用可能なすべての垂直スペースを埋めたいので、そうしたくありません。

StackPanel で計算された Height を読み取るコードに ScrollViewer Height を適用することを考えていますが、これは正しい方法ではないようです。HeightActualHeightを StackPanel Height プロパティにバインドしようとしましたが、結果はありませんでした。

<ScrollViewer
    Grid.Row="1"
    VerticalAlignment="Top"
    VerticalScrollBarVisibility="Auto"
    HorizontalScrollBarVisibility="Disabled"
    ScrollViewer.VerticalScrollMode="Enabled"
    ScrollViewer.HorizontalScrollMode="Disabled"
    ScrollViewer.ZoomMode="Disabled">
    <StackPanel x:Name="sptest" Orientation="Vertical">
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test1</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test2</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test3</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test4</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test5</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test6</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test7</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test8</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test9</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test10</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test11</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test12</TextBlock>
    </StackPanel>
</ScrollViewer>

加えて、水平方向の利用可能なスペースを埋める GridView もあり、自動的にスクロールバーがあります。私はそれを定義しておらず、必要に応じて表示されます。StackPanel が思いどおりに動作しないのは奇妙です。私は何を間違っていますか?

編集

私はこのSOの質問を見つけました。これはWinRT ではなくWPFに関するものですが、おそらく同じ問題です。それは言います:

StackPanel の高さを固定しないとできません。一方向に無期限に成長するように設計されています。別のパネルを使用することをお勧めします

StackPanel を Grid に変更しました (列が 1 つしか必要ないため、行の定義が原因でしたくありませんでした) が、ScrollViewer も機能しません。

4

4 に答える 4

18

長い夜寝た後、親のStackPanelグリッドに変更して解決しました。2番目のStackPanelをScrollViewer要素内に保持しましたが、機能します。

親がグリッドではなくStackPanelである場合に、ScrollViewerが機能しない理由がわかりません。誰かが理由を知っているなら、私に説明してください。StackPanelの垂直目的のように思われるため、1列2行のグリッドを作成したくありませんでした。

理由はわかりませんが、この質問が同じ問題を抱えている他の人に役立つことを願っています。これを読んでいて、この問題を説明できる場合は、教えてください...知りたいです。

于 2013-03-10T16:05:05.727 に答える
3

スタック パネルは、追加する子の数だけ成長し続けることができるコンテナの一種であり、各子に等しいスペースを提供します。したがって、スクロールビューアは、親にスペース制限を定義するように指示するために、ここで高さを必要とします。割り当てられた領域で機能できるようにします。

それが役立つことを願っています。

于 2014-01-22T18:52:42.693 に答える
0

StackPanel を ScrollViewer の子にし、StackPanel の Height を設定することで作業を行いました

于 2015-11-10T18:21:12.387 に答える