[英]WPF ScrollViewer horizontal scrolling with buttons
我在 ScrollViewer 中有一個水平方向的 ListBox。 當列表增長時,它會自動滾動到最后一個元素。 滾動條可以工作,但是必須為此禁用。 我需要有單獨的按鈕,可以按預定的迭代滾動 ScrollViewer(很像滾動條上的按鈕)。 為此,我嘗試過:
sv.ScrollToHorizontalOffset(sv.HorizontalOffset + 20);
但是,ScrollViewer 的 HorizontalOffset 似乎始終為 0,並且該方法不會對任何值執行任何操作。
sv.LineRight();
sv.LineLeft();
兩者都不起作用,可能是因為唯一的子元素是 ListBox。 如果我將 ListBox 的方向更改為垂直,則 ScrollViewer 的 VerticalOffset 會隨着滾動/添加新元素而改變,並且 ScrollToVerticalOffset 可以正常工作。 為什么這與水平方向不同? 還有其他解決方案嗎?
注意:這是在沒有使用 XAML 放置控件的情況下完成的。
要完成這項工作,您需要做幾件事:
刪除外部ScrollViewer
並僅使用內置於ListBox
的ScrollViewer
。
在 ListBox 上設置以下屬性:
ScrollViewer.CanContentScroll="False"
這將使HorizontalOffset
屬性以像素為單位工作。 當它設置為True
它適用於項目。
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
這將使滾動保持活動狀態,但會隱藏滾動條。
在您的代碼中,您可以像這樣獲取ListBox
的ScrollViewer
。 在這個例子中,我的ListBox
被命名為x:Name="ListBox"
。
var scrollViewer = ListBox.FindChildByType<ScrollViewer>();
最后,您可以像下面這樣設置偏移量。 在我的示例中,我創建了一個方法並從我的按鈕單擊事件處理程序中傳遞了一個值。
private void ScrollHorizontally(double offset)
{
var scrollViewer = ListBox.FindChildByType<ScrollViewer>();
scrollViewer?.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + offset);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.