列表框选择在ScrollViewer内部中断

时间:2017-04-27 19:24:26

标签: wpf

使用下面的XAML,我的ListBox的选择行为被破坏了。如果我尝试选择最右边的项目,则滚动向左跳转并选择错误的ListBoxItem:

 <Grid>
    <ScrollViewer HorizontalScrollBarVisibility="Visible">
        <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"></StackPanel>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBoxItem>Item 1</ListBoxItem>
            <ListBoxItem>Item 2</ListBoxItem>
            <ListBoxItem>Item 3</ListBoxItem>
            <ListBoxItem>Item 4</ListBoxItem>
            <ListBoxItem>Item 5</ListBoxItem>
            <ListBoxItem>Item 6</ListBoxItem>
            <ListBoxItem>Item 7</ListBoxItem>
            <ListBoxItem>Item 8</ListBoxItem>
            <ListBoxItem>Item 9</ListBoxItem>
            <ListBoxItem>Item 10</ListBoxItem>
            <ListBoxItem>Item 11</ListBoxItem>
            <ListBoxItem>Item 12</ListBoxItem>
            <ListBoxItem>Item 13</ListBoxItem>
            <ListBoxItem>Item 14</ListBoxItem>
            <ListBoxItem>Item 15</ListBoxItem>
            <ListBoxItem>Item 16</ListBoxItem>
            <ListBoxItem>Item 17</ListBoxItem>
            <ListBoxItem>Item 18</ListBoxItem>
            <ListBoxItem>Item 19</ListBoxItem>
            <ListBoxItem>Item 20</ListBoxItem>
        </ListBox>
    </ScrollViewer>
</Grid>

如果我删除ScrollViewer并使用ListBox的ScrollViewer,则问题不存在。我这样做的原因是因为在我的实际应用程序中,我使用派生的ScrollViewer控件,允许在拖放操作期间滚动。有任何建议或替代方法吗?

1 个答案:

答案 0 :(得分:2)

你不应该将ListBox包裹在ScrollViewer内。而是直接编辑其模板。

<Grid>
    <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ItemsControl.Template>
            <ControlTemplate>
                <ScrollViewer VerticalScrollBarVisibility="Auto"
                              HorizontalScrollBarVisibility="Auto">
                    <ItemsPresenter Margin="8,8,8,0"/>
                </ScrollViewer>
            </ControlTemplate>
        </ItemsControl.Template>
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"></StackPanel>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBoxItem>Item 1</ListBoxItem>
        <ListBoxItem>Item 2</ListBoxItem>
        <ListBoxItem>Item 3</ListBoxItem>
        <ListBoxItem>Item 4</ListBoxItem>
        <ListBoxItem>Item 5</ListBoxItem>
        <ListBoxItem>Item 6</ListBoxItem>
        <ListBoxItem>Item 7</ListBoxItem>
        <ListBoxItem>Item 8</ListBoxItem>
        <ListBoxItem>Item 9</ListBoxItem>
        <ListBoxItem>Item 10</ListBoxItem>
        <ListBoxItem>Item 11</ListBoxItem>
        <ListBoxItem>Item 12</ListBoxItem>
        <ListBoxItem>Item 13</ListBoxItem>
        <ListBoxItem>Item 14</ListBoxItem>
        <ListBoxItem>Item 15</ListBoxItem>
        <ListBoxItem>Item 16</ListBoxItem>
        <ListBoxItem>Item 17</ListBoxItem>
        <ListBoxItem>Item 18</ListBoxItem>
        <ListBoxItem>Item 19</ListBoxItem>
        <ListBoxItem>Item 20</ListBoxItem>
    </ListBox>
</Grid>