문제

아래의 예에는 수십 개의 글꼴 이름이있는 ListBox가 있습니다.

나는 그것이 수직 스크롤 바를 자동으로 가지고 있다고 생각했을 것입니다. 그래서 당신은 목록의 첫 번째 글꼴뿐만 아니라 모든 글꼴을 선택할 수 있지만 그렇지 않습니다.

그래서 나는 "스크롤 뷰어"를 추가하고 오른쪽에 "스크롤 바 영역"을 넣지 만 스크롤 바 영역에는 스크롤 바가 없어서 스크롤 할 수 있습니다 (!).

왜 스크롤 바가 자동화되지 않으며 어떻게 스크롤 바를 갖도록 강요합니까?

<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>

이 값을 자동으로 설정하면 필요한 기준으로 스크롤 바가 팝업됩니다.

다른 팁

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>

중요한 컨테이너만이 아닙니다. 예에서 즉시 컨테이너는 a입니다 Grid, 그러나 그 때문에 Grid a StackPanel, 외부 StackPanel 직계 아이를 수용하도록 확장됩니다 Grid, 그 아이가 수용하기 위해 확장 할 수 있도록 그것의 아이 (The ListBox).

당신이 어느 시점에서든 높이를 제한하면 - 높이를 설정함으로써 ListBox, 내부의 높이를 설정하여 Grid, 또는 단순히 외부 용기를 만들어 a Grid - 그러면 컨트롤에 맞는 목록 항목이 너무 많을 때마다 수직 스크롤 막대가 자동으로 나타납니다.

ListBox에 "높이"를 추가하여 스크롤바를 멋지게 추가했습니다.

가시성이 숨겨져있는 경우 스크롤 막대가 목록 상자에 자동으로 추가됩니다. 목록 항목의 크기가 하나를 초과 할 때마다 목록 상자 내부에 표시 될 수있는 항목 또는 수평 목록 상자는 실행 시간 동안 볼 수 있습니다.

제 경우에는 ListBox의 항목 수가 동적이므로 높이 속성을 사용하고 싶지 않았습니다. 대신 Maxheight를 사용했고 잘 작동합니다. 스크롤 바는 내가 할당 한 공간을 채울 때 나타납니다.

나는 같은 문제를 겪고 있었고, Combobox와 StackPanel에 Listbox가 있었고 Listbox의 스크롤 막대가 나타나지 않았습니다. 대신 두 개를 Dockpanel에 넣어서 이것을 해결했습니다. Combobox Dockpanel.dock = "Top"을 설정하고 ListBox가 나머지 공간을 채우게합니다.

XAML Listbox 스크롤러 -Windows 10 (UWP)

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top