de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
Stephen Miller
Stephen Miller
質問

ScrollViewerで高さが固定されていないとスクロールが遠くまで届かない

以下のようなXAMLがあります。解決できない問題は、ビューの完全なグリッド(固定高さ)の周りにラップしているスクロールビューアを持っていますが、ウィンドウサイズよりも長いコンテンツでスクロールバーを取得することができないということです。

ユーザーコントロールがウィンドウの高さいっぱいになるようにしたいのですが、グリッドコントロールの長さがウィンドウサイズより大きい場合は、スクロールできるようにしたいのです。しかし、スクロールビューアの高さを手動で設定しないと、スクロール可能なスクロールバーが表示されません(例では手動で設定)。

このサイトの他の例も見ましたが、有効な答えに出会えません (この リンク も含めて)。

XAML。

<UserControl d:DesignWidth="300" d:DataContext="{d:DesignInstance ViewModels:EntityViewModel}">
    <StackPanel>
        <Label Content=“text” />
        <ScrollViewer Height="450" Width="250" VerticalScrollBarVisibility="auto">
            <Grid>
                <ItemsControl ItemsSource="{Binding Entities}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <local:EntityView DataContext="{Binding}" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </Grid>
        </ScrollViewer>
    </StackPanel>
</UserControl>

編集 簡単に再現できる追加の例を追加します。必要なのは、ドックパネル(グリッドでも可)がユーザーコントロールが挿入された画面に収まる以上のコンテンツを持っているときに、スクロールビューをスクロールできるようにすることです(つまり、スクロールビューアのサイズを固定することはできません')。

<Window Title="MainWindow" Height="200" Width="300">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" />
        </Grid.ColumnDefinitions>

        <StackPanel Grid.Column="0">
            <Label Content="title"/>
            <ScrollViewer>
                <DockPanel>
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                </DockPanel>
            </ScrollViewer>
        </StackPanel>
    </Grid>
</Window>
2 2018-09-01T19:07:01+00:00 2
Stephen Miller
Stephen Miller
編集された質問 2日 9月 2018 в 9:30
プログラミング
wpf
c#
scrollviewer
解決策・回答
 Clemens
Clemens
2日 9月 2018 в 7:00
2018-09-02T07:00:00+00:00
さらに
ソース
編集
#36710416

垂直方向の Orientation を持つ StackPanel は、子要素の高さを制限しません。言い換えると、Scrollviewer は、明示的に高さを設定しない限り、常にコンテンツ全体を表示するのに必要な高さと同じ高さになります。

グリッドやDockPanelなど、別のパネルを選択する必要があります。

<UserControl ...>
    <DockPanel>
        <Label DockPanel.Dock="Top" Content="text"/>
        <ScrollViewer VerticalScrollBarVisibility="Auto">
            <ItemsControl ItemsSource="{Binding Entities}">
                ...
            </ItemsControl>
        </ScrollViewer>
    </DockPanel>
</UserControl>
3
0
 GlacialMan
GlacialMan
1日 9月 2018 в 7:12
2018-09-01T19:12:55+00:00
さらに
ソース
編集
#36710415

StackPanelにScrollViewer` を設定してみてください。

<ScrollViewer Height="450" Width="250" VerticalScrollBarVisibility="auto">
    <StackPanel>
        <Grid>
            <ItemsControl ItemsSource="{Binding Entities}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <local:EntityView DataContext="{Binding}" />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </Grid>
    </StackPanel>
</ScrollViewer>
0
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Денис Анненский
登録済み 2日前
2
365
登録済み 6日前
3
True Image
登録済み 1週間前
4
archana agarwal
登録済み 1週間前
5
Maxim Zhilyaev
登録済み 1週間前
JA
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属