75

次のWPFXAMLでは、ScrollViewerは機能しません(スクロールバーは表示されますが、スクロールできず、コンテンツがウィンドウから下に移動します)。

外側のStackPanelをグリッドに変更できます。これで機能します。

ただし、次のコードを再現したアプリケーションでは、外部のStackPanelが必要です。ScrollViewerに使用可能なスクロールバーを表示させるには、StackPanelに対して何をする必要がありますか?例:VerticalAlignment = "Stretch" Height="Auto"は機能しません。

 <StackPanel>
        <ScrollViewer>
            <StackPanel>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
                <TextBlock Text="This is a test"/>
            </StackPanel>
        </ScrollViewer>
 </StackPanel>
4

8 に答える 8

61

これもしばらくの間私を悩ませていました。秘訣は、スタックパネルをスクロールビューアー内に配置することです。

また、スクロール ビューアの CanContentScroll プロパティを True に設定する必要があります。次に例を示します。

  <ScrollViewer Grid.Row="1" Margin="299,12,34,54" Name="ScrollViewer1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Height="195" CanContentScroll="True">
        <StackPanel Name="StackPanel1" OverridesDefaultStyle="False"  Height="193" Width="376" VerticalAlignment="Top" HorizontalAlignment="Left"></StackPanel>
  </ScrollViewer>
于 2010-07-08T10:53:07.037 に答える
59

の高さを固定しないとできませんStackPanel。一方向に無期限に成長するように設計されています。別のものを使用することをお勧めしますPanel。なぜアウターが「必要」なのStackPanelですか?

于 2009-04-29T15:13:48.700 に答える
9

気付かないうちに StackPanel を持っている場合があることに注意してください。私の場合、このコードがありました

<ScrollViewer>
  <ItemsControl ItemsSource="{Binding Pages}"/>
</ScrollViewer>

これはうまくいきました。バインディングによって参照される「ページ」は、まったく異なる複雑な UserControls であり、そのうちのいくつかにはスクロールバーのみを配置したいと考えていました。だから私はスクロールビューアを削除しました:

 <ItemsControl ItemsSource="{Binding Pages}"/>

そして、ScrollViewer を必要なユーザーコントロールの一番上の要素として配置しました。しかし、これはうまくいきませんでした。コンテンツがページから流れ出しました。最初は、この質問/回答が役立つとは思いませんでしたが、ItemsControl のデフォルトの ItemPanel が StackPanel であることに気付きました。そこで、StackPanel ではない ItemsPanel を指定して問題を解決しました。

<ItemsControl ItemsSource="{Binding Pages}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>
于 2011-09-16T07:56:56.357 に答える
5

実際、私がそのダイルマンを解決した方法は、外側のスタック パネルを削除し、代わりにスクロール ビューアーをメイン グリッド内の必要な位置に設定することでした。

        <Grid Style="{StaticResource LayoutRootStyle}">
    <Grid.RowDefinitions>
        <RowDefinition Height="160"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>        

    <!-- Vertical scrolling grid used in most view states -->    

        <ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Auto">
            <StackPanel Orientation="Horizontal">
                <GridView>
                ...
                </GridView>
            </StackPanel>
        </ScrollViewer>        
于 2013-01-13T09:50:29.270 に答える
1

Grid.Row="1" を StackPanel から ScrollViewer に移動すると、完全に解決しました。

StackPanel に表示する項目が 40 個ほどある長いリストがありましたが、表示されていたのは最初の 20 個だけでした。

    <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
        <StackPanel x:Name="ContentPanel" Margin="12,0,12,0">
        <TextBlock Text="{Binding Line1}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        <TextBlock Text="" Margin="10,-2,10,0" Style="{StaticResource PhoneTextNormalStyle}" />
        ...
        </StackPanel>
    </ScrollViewer>
于 2014-04-11T08:43:48.433 に答える