我在TabControl中有一个Scrollviewer,并且由于某种原因,当您更改选项卡时,我的ScrollViewer跳转到HorizontalOffset为12.我的ScrollViewer在其中有一个ListView高度不受限制。这是一个奇怪的布局,但滚动条内的所有东西都必须是可打印的,所以我不能轻易让ListView自己滚动。当调用ScrollToHorizontalOffset()时,WPF - ScrollViewer不会滚动
于是,我在的TabControl的SelectionChanged事件以下行:
Console.WriteLine(Scroller.HorizontalOffset);
Scroller.ScrollToHorizontalOffset(0);
Console.WriteLine(Scroller.HorizontalOffset);
他们打印出12两个调用的WriteLine()......它也没有动,但你可以滚动来自实际的用户界面。
有谁知道什么会导致这种奇怪的行为?
我会尽量找到合适的代码发布,但这是一个很大的项目,可能很难在示例解决方案中重新创建。
其他信息:
- 的问题仅如果内容足够大,它可以水平滚动发生。
- 我的水平和垂直滚动条的可见性是自动的,但如果它们被设置为隐藏或可见,问题仍然会发生。
UPDATE:
如果您点击我的ListView那是的ScrollViewer内,选择一个项目,将滚动的ScrollViewer这个相同的12个像素偏移。我的问题可能与我的ListView关注点有关吗? ListView在接收焦点时是否自己调用BringIntoView()?
此XAML再现问题:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window11" Height="300" Width="300">
<TabControl>
<TabItem Header="Tab One">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<ListBox Margin="25,0,0,0" Width="2000">
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
</ListBox>
</ScrollViewer>
</TabItem>
<TabItem Header="Tab Two">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<ListBox Margin="25,0,0,0" Width="2000">
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
</ListBox>
</ScrollViewer>
</TabItem>
</TabControl>
</Window>
掴这XamlPad,运行它。单击一个Tab标题,并注意到ScrollViewer自身的滚动,玩弄它并注意ListBox上的边距如何从屏幕滚动。如何防止或解决此问题?这让我的布局看起来非常漂亮。
https://go4answers.webhost4life.com/Example/scrollviewer-scrolltohorizontaloffset-51429.aspx – 2014-07-16 19:17:57