94

以下の例では、数十のフォント名を含むリストボックスがあります。

リストの最初のフォントだけでなく、任意のフォントを選択できるように、自動的に垂直スクロールバーが表示されると思いましたが、そうではありません。

そこで、「ScrollViewer」を追加しました。これにより、右側に「スクロールバー領域」が配置されますが、スクロールできるようにスクロールバー領域にスクロールバーがありません(!)。

スクロールバーが自動ではないのはなぜですか?また、スクロールバーを強制的に表示するにはどうすればよいですか?

<StackPanel Name="stack1">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="2*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <ScrollViewer>
            <ListBox Grid.Row="0" Name="lstFonts" Margin="3"  ItemsSource="{x:Static Fonts.SystemFontFamilies}"/>
        </ScrollViewer>
    </Grid>
</StackPanel>
4

7 に答える 7

159

ソリューションの問題は、おそらくリストボックス内に配置したいリストボックスの周囲にスクロールバーを配置していることです。

リストボックスにスクロールバーを強制する場合は、ScrollBar.VerticalScrollBarVisibility添付プロパティを使用します。

<ListBox 
    ItemsSource="{Binding}" 
    ScrollViewer.VerticalScrollBarVisibility="Visible">
</ListBox>

この値をAutoに設定すると、必要に応じてスクロールバーがポップアップ表示されます。

于 2009-01-23T13:10:10.067 に答える
33

ListBoxすでに含まれていますScrollViewer。デフォルトでScrollBarは、コンテンツがスペースよりも多い場合に が表示されます。しかし、一部のコンテナはコンテンツ (例: StackPanel) に合わせてサイズを変更するため、「スペースよりコンテンツが多い」ことはありません。このような場合、ListBoxコンテンツに必要なだけのスペースが常に与えられます。

スペースよりもコンテンツが多いという条件を計算するには、サイズを知る必要があります。ListBox要素自体に明示的にサイズを設定するかListBox、ホスト パネルからサイズを設定して、サイズが制限されていることを確認してください。

ホスト パネルが垂直で、高さを設定する必要がある場合は、それ自体に高さを設定する必要がありStackPanelます。他のタイプのコンテナの場合、たとえばは、コンテナによって制約を受ける可能性があります。たとえば、元のコードを次のように変更できます。VerticalScrollBarListBoxGridListBox

<Grid Name="grid1">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="2*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <ListBox Grid.Row="0" Name="lstFonts" Margin="3"
                 ItemsSource="{x:Static Fonts.SystemFontFamilies}"/>
    </Grid>
</Grid>

重要なのは直接のコンテナだけではないことに注意してください。あなたの例では、直接のコンテナは ですGridが、それGridは に含まれているため、その子が拡張してその子 ( ) を収容できるようStackPanelに、外側StackPanelは直接の子を収容するために拡張されます。GridListBox

ListBoxの高さを設定するか、内部の高さを設定するGridか、単純に外部コンテナーを作成することによって、任意のポイントで高さを制限すると、Gridリスト項目が多すぎて表示できないときはいつでも垂直スクロール バーが自動的に表示されます。コントロールに収まります。

于 2012-02-02T14:42:54.123 に答える
17

ListBox に「高さ」を追加すると、スクロールバーがうまく追加されました。

于 2009-01-23T13:22:16.627 に答える
4

表示が非表示に設定されていない限り、スクロール バーはリスト ボックスに自動的に追加されます。リスト アイテムのサイズが、リスト ボックス内に表示できるサイズを超えると、実行時に縦または横のリスト ボックスが表示されます。

于 2011-06-14T09:51:53.277 に答える
1

私の場合、ListBox 内のアイテムの数は動的であるため、Height プロパティを使用したくありませんでした。代わりに MaxHeight を使用しましたが、うまく機能します。割り当てたスペースがいっぱいになると、スクロールバーが表示されます。

于 2014-04-09T18:03:20.923 に答える
0

XAML ListBox スクローラー - Windows 10 (UWP)

<Style TargetType="ListBox">
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Visible"/>
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Visible"/>
</Style>

于 2016-05-08T07:55:45.817 に答える
0

私は同じ問題を抱えていました.StackPanelにComboBoxの後にListBoxがあり、ListBoxのスクロールバーが表示されませんでした. 代わりに2つをDockPanelに入れることでこれを解決しました。ComboBox DockPanel.Dock="Top" を設定し、ListBox で残りのスペースを埋めます。

于 2015-07-09T17:39:18.697 に答える