programing

ListBox에서 세로 스크롤 막대를 가져오려면 어떻게 해야 합니까?

stoneblock 2023. 5. 19. 23:57

ListBox에서 세로 스크롤 막대를 가져오려면 어떻게 해야 합니까?

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

자동으로 세로 스크롤 막대가 달려 있어서 목록의 첫 번째 글꼴뿐만 아니라 원하는 글꼴을 선택할 수 있을 것이라고 생각했지만 그렇지 않습니다.

그래서 "ScrollViewer"를 추가했는데 오른쪽에 "Scrollbar 영역"이 있지만 스크롤(!)할 수 있도록 스크롤바 영역에는 스크롤바가 없습니다.

스크롤바가 자동으로 작동하지 않는 이유와 스크롤바를 강제로 사용하려면 어떻게 해야 합니까?

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

중요한 것은 바로 사용할 수 있는 용기만이 아닙니다.예제에서 즉시 컨테이너는 다음은Grid하지만 그것 때문에Grid에 의해 포함됩니다.StackPanel바깥쪽StackPanel직계 하위 항목을 수용하도록 확장됨Grid아이가 아이를 수용하기 위해 확장할 수 있도록 (더.ListBox).

임의의 지점에서 높이를 제한하는 경우 - 의 높이를 설정합니다.ListBox내부 높이를 설정하여Grid또는 단순히 외부 용기를 a로 만듦으로써.Grid목록 항목이 너무 많아 컨트롤에 맞지 않을 때마다 세로 스크롤 막대가 자동으로 나타납니다.

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

스크롤 막대의 가시성을 숨김으로 설정하지 않으면 목록 상자에 자동으로 추가됩니다.목록 항목의 크기가 목록 상자 안에 표시될 수 있는 항목을 초과할 때마다 실행 시간 동안 수직 또는 수평 목록 상자를 볼 수 있습니다.

저의 경우 ListBox의 항목 수가 동적이므로 Height 속성을 사용하고 싶지 않았습니다.대신 Max Height를 사용했는데 작동이 잘 됩니다.스크롤 막대가 할당된 공간을 채우면 나타납니다.

저도 같은 문제가 있었습니다. 스택 패널에 콤보박스가 있고 그 다음에 리스트박스가 있는데 리스트박스의 스크롤바가 나타나지 않았습니다.대신 두 개를 독 패널에 넣어 해결했습니다.콤보박스 독 패널을 설정했습니다.="맨 위"를 도킹하고 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