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