使用下面的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控件,允许在拖放操作期间滚动。有任何建议或替代方法吗?
答案 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>