リストボックスで垂直スクロールバーを取得するにはどうすればよいですか?
-
19-08-2019 - |
質問
下の例では、リストボックスに数十個のフォント名が含まれています。
リストの最初のフォントだけでなく、任意のフォントを選択できるように、自動的に垂直スクロールバーが表示されると思っていたでしょう。
だから<!> quot; ScrollViewer <!> quot;を追加しました。そして、それは<!> quot; scrollbar area <!> quot;右側にありますが、スクロールできるようにスクロールバー領域にスクロールバーがありません(!)。
スクロールバーが自動ではないのはなぜですか?スクロールバーを強制するにはどうすればよいですか
<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>
解決
ソリューションの問題は、おそらくListBox内に配置したいListBoxの周りにスクロールバーを配置することです。
ListBoxでスクロールバーを強制する場合は、ScrollBar.VerticalScrollBarVisibility添付プロパティを使用します。
<ListBox
ItemsSource="{Binding}"
ScrollViewer.VerticalScrollBarVisibility="Visible">
</ListBox>
この値をAutoに設定すると、必要に応じてスクロールバーがポップアップします。
他のヒント
ListBox
にはすでにScrollViewer
が含まれています。デフォルトでは、スペースよりもコンテンツが多い場合にScrollBar
が表示されます。ただし、一部のコンテナは、コンテンツ(たとえばStackPanel
)に合わせてサイズを変更するため、<!> quot; space <!> quot;よりも多くのコンテンツはありません。このような場合、VerticalScrollBar
には常にコンテンツに必要なスペースが与えられます。
スペースよりもコンテンツが多いという条件を計算するには、サイズを知る必要があります。 Grid
要素自体に明示的にサイズを設定するか、ホストパネルから<=>のサイズを制限してください。
ホストパネルが垂直<=>で、<=>が必要な場合は、<=>自体にHeightを設定する必要があります。他の種類のコンテナの場合、例えば<=>、<=>はコンテナによって制限できます。たとえば、元のコードを次のように変更できます。
<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>
重要なのはただのコンテナではないことに注意してください。あなたの例では、直接コンテナは<=>ですが、その<=>は<=>に含まれているため、外側の<=>は、その直接の子<=>に合わせて展開され、その子はその子(<=>)に対応します。
任意のポイントで高さを制限する場合<!>#8212; <=>の高さを設定するか、内側の<=>の高さを設定するか、外側のコンテナを<=> <!>#8212にするだけです。リスト項目が多すぎてコントロールに収まらない場合は常に、垂直スクロールバーが自動的に表示されます。
<!> quot; Height <!> quot;を追加しました。リストボックスに追加すると、スクロールバーがうまく追加されました。
スクロールバーは、表示が非表示に設定されていない限り、リストボックスに自動的に追加されます。リストアイテムのサイズが1つを超えると、実行中にリストボックス内に縦または横のリストボックスが表示されます。
私の場合、ListBoxのアイテムの数は動的なので、Heightプロパティを使用したくありませんでした。代わりにMaxHeightを使用しましたが、うまく機能します。スクロールバーは、割り当てられたスペースがいっぱいになると表示されます。
同じ問題を抱えていました。ComboBoxに続いてStackPanelのListBoxがあり、ListBoxのスクロールバーが表示されませんでした。代わりに2つをDockPanelに入れることでこれを解決しました。 ComboBox DockPanel.Dock = <!> quot; Top <!> quot;を設定します。リストボックスで残りのスペースを埋めます。
XAML ListBox Scroller-Windows 10(UWP)
<Style TargetType="ListBox">
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Visible"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Visible"/>
</Style>