내 ListBox에서 수직 스크롤바를 어떻게 얻을 수 있습니까?
아래 예제에는 수십 개의 글꼴 이름이있는 ListBox가 있습니다.
목록의 첫 번째 글꼴뿐만 아니라 모든 글꼴을 선택할 수 있도록 자동으로 세로 스크롤바가있을 것이라고 생각했을 것입니다.
그래서 "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>
솔루션의 문제는 ListBox 내부에 배치하려는 ListBox 주위에 스크롤 막대를 배치한다는 것입니다.
ListBox에 스크롤바를 강제로 적용하려면 ScrollBar.VerticalScrollBarVisibility 연결된 속성을 사용하십시오.
<ListBox
ItemsSource="{Binding}"
ScrollViewer.VerticalScrollBarVisibility="Visible">
</ListBox>
이 값을 Auto로 설정하면 필요에 따라 스크롤바가 팝업됩니다.
ListBox
이미 포함되어 있습니다 ScrollViewer
. 기본적으로 ScrollBar
공간보다 콘텐츠가 더 많을 때 표시됩니다. 그러나 일부 컨테이너는 내용을 수용하기 위해 자체 크기를 조정 StackPanel
하므로 (예 :) "공간보다 더 많은 내용"은 없습니다. 이러한 경우에는 ListBox
항상 콘텐츠에 필요한만큼의 공간이 제공됩니다.
공간보다 콘텐츠가 더 많은 조건을 계산하기 위해서는 크기를 알아야합니다. 요소 자체 ListBox
에 명시 적으로 크기를 설정 ListBox
하거나 호스트 패널에서 크기를 제한 했는지 확인합니다 .
호스트 패널이 수직 StackPanel
이고 원하는 경우 자체적으로 VerticalScrollBar
높이를 설정해야 ListBox
합니다. 예를 들어, 용기의 다른 유형 Grid
은이 ListBox
컨테이너에 의해 제한 될 수있다. 예를 들어 원본 코드를 다음과 같이 변경할 수 있습니다.
<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
는 직계 자식 Grid
을 수용 하도록 확장되어 자식이 자식 ( ListBox
) 을 수용 하도록 확장 할 수 있습니다 .
의 높이를 ListBox
설정 Grid
하거나 내부의 높이를 설정 하거나 단순히 외부 컨테이너를 a 로 설정하여 어느 지점에서든 높이를 제한하면 Grid
목록 항목이 너무 많을 때마다 자동으로 세로 스크롤 막대가 나타납니다. 컨트롤에 적합합니다.
내 ListBox에 "Height"를 추가했고 스크롤바를 멋지게 추가했습니다.
스크롤 막대는 가시성이 숨김으로 설정되어 있지 않으면 목록 상자에 자동으로 추가됩니다. 목록 항목의 크기가 크기를 초과 할 때마다 목록 상자 안에 표시 될 수있는 세로 또는 가로 목록 상자는 런타임 중에 볼 수 있습니다.
제 경우에는 ListBox의 항목 수가 동적이므로 Height 속성을 사용하고 싶지 않았습니다. 대신 MaxHeight를 사용했고 잘 작동합니다. 스크롤바는 내가 할당 한 공간을 채울 때 나타납니다.
동일한 문제가 발생하여 ComboBox와 StackPanel에 ListBox가 있고 ListBox의 스크롤 막대가 표시되지 않았습니다. 대신 DockPanel에 두 개를 넣어이 문제를 해결했습니다. ComboBox DockPanel.Dock = "Top"을 설정하고 ListBox가 나머지 공간을 채 웁니다.
XAML 목록 상자 스크롤러-Windows 10 (UWP)
<Style TargetType="ListBox">
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Visible"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Visible"/>
</Style>
참고 URL : https://stackoverflow.com/questions/472796/how-can-i-get-a-vertical-scrollbar-in-my-listbox
'your programing' 카테고리의 다른 글
Python : BeautifulSoup-이름 속성을 기반으로 속성 값 가져 오기 (0) | 2020.10.09 |
---|---|
Pandas 반복에 성능 문제가 있습니까? (0) | 2020.10.09 |
버퍼 끝까지 vim 매크로 재생 (0) | 2020.10.09 |
조각 내부에서 소프트 키보드를 숨기는 방법은 무엇입니까? (0) | 2020.10.08 |
Ruby에서 현재 시간을 13 자리 정수로 얻는 방법은 무엇입니까? (0) | 2020.10.08 |