簡體   English   中英

WPF ScrollViewer 帶按鈕的水平滾動

[英]WPF ScrollViewer horizontal scrolling with buttons

我在 ScrollViewer 中有一個水平方向的 ListBox。 當列表增長時,它會自動滾動到最后一個元素。 滾動條可以工作,但是必須為此禁用。 我需要有單獨的按鈕,可以按預定的迭代滾動 ScrollViewer(很像滾動條上的按鈕)。 為此,我嘗試過:

sv.ScrollToHorizontalOffset(sv.HorizontalOffset + 20);

但是,ScrollViewer 的 Horizo​​ntalOffset 似乎始終為 0,並且該方法不會對任何值執行任何操作。

sv.LineRight();
sv.LineLeft();

兩者都不起作用,可能是因為唯一的子元素是 ListBox。 如果我將 ListBox 的方向更改為垂直,則 ScrollViewer 的 VerticalOffset 會隨着滾動/添加新元素而改變,並且 ScrollToVerticalOffset 可以正常工作。 為什么這與水平方向不同? 還有其他解決方案嗎?

注意:這是在沒有使用 XAML 放置控件的情況下完成的。

要完成這項工作,您需要做幾件事:

刪除外部ScrollViewer並僅使用內置於ListBoxScrollViewer

在 ListBox 上設置以下屬性:

ScrollViewer.CanContentScroll="False"

這將使HorizontalOffset屬性以像素為單位工作。 當它設置為True它適用於項目。

ScrollViewer.HorizontalScrollBarVisibility="Hidden"

這將使滾動保持活動狀態,但會隱藏滾動條。

在您的代碼中,您可以像這樣獲取ListBoxScrollViewer 在這個例子中,我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM