在某些配置中,ListBox的滚动条在WPF中消失

时间:2010-07-14 15:22:51

标签: wpf xaml

当我将列表框置于2 * 2网格中时,我设法重现了列表框的自动滚动查看器功能中的奇怪行为。

如果您尝试使用以下xaml,您将看到垂直滚动查看器在那里但不可见(它只是超过第一列的宽度)

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="200" Width="200">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition />
    </Grid.RowDefinitions>

    <ListBox Grid.Row="0" Grid.RowSpan="2" Grid.Column="0" >
        <ListBox.Items>
            <TextBlock Text="Item"/>
            <TextBlock Text="Item"/>
            <TextBlock Text="Item"/>
            <TextBlock Text="Item"/>
            <TextBlock Text="Item"/>
            <TextBlock Text="Item"/>
            <TextBlock Text="Item"/>
            <TextBlock Text="Item"/>
            <TextBlock Text="Item"/>
            <TextBlock Text="Item"/>
            <TextBlock Text="Item"/>
            <TextBlock Text="Item"/>
        </ListBox.Items>
    </ListBox>

    <Canvas Background="Yellow" Grid.Row="0" Grid.Column="1" MinHeight="20"/>
    <Canvas Background="Red" Grid.Row="1" Grid.Column="1" MinHeight="20"/>

</Grid>

据我所知,有问题的控件是第一个画布(黄色画布)。 更具体的说,WPF不喜欢将任何控件放在row = 0 column = 1中,并且会破坏scrollviewer功能。

此问题是否可以重复给其他人或只是我?

1 个答案:

答案 0 :(得分:1)

是的,它是可重复的,实际上,它可以在每个网格,位置或大小中重现。当您向ListBox添加实际高度时,滚动条将返回。

然而,真正的问题似乎来自黄色画布,它与列表框重叠。不管是不是这个错误,我不知道。删除黄色帆布,你没事。将行从0更改为1,您也可以。但是,当你给ListBox一个特定的高度时,如上所述,滚动条也会回来:

<ListBox Grid.Row="0" Grid.RowSpan="2" Grid.Column="0" Height="100">
    <ListBox.Items>
        <TextBlock Text="Item 1"/>
        <TextBlock Text="Item 2"/>
        <TextBlock Text="Item 3"/>
        <TextBlock Text="Item 4"/>
        <TextBlock Text="Item 5"/>
        <TextBlock Text="Item 6"/>
        <TextBlock Text="Item 7"/>
        <TextBlock Text="Item 8"/>
        <TextBlock Text="Item 9"/>
        <TextBlock Text="Item 10"/>
        <TextBlock Text="Item 11"/>
        <TextBlock Text="Item 12"/>
    </ListBox.Items>
</ListBox>