簡體   English   中英

如何以編程方式滾動 WPF 列表視圖?

[英]How can I programmatically scroll a WPF listview?

是否可以以編程方式滾動 WPF 列表視圖? 我知道 winforms 不會這樣做,對嗎?

我說的是向上或向下滾動 50 個單位等。而不是一次滾動整個項目高度。

是的,您必須從 ListView 中獲取 ScrollViwer,或者一旦您有權訪問它,您就可以使用它公開的方法或覆蓋滾動。 您還可以通過獲取主要內容區域並使用它的IScrollInfo接口實現來滾動。

這是一個小幫手,可以獲取 ListBox、ListView 等的 ScrollViwer 組件。

public static DependencyObject GetScrollViewer(DependencyObject o)
{
    // Return the DependencyObject if it is a ScrollViewer
    if (o is ScrollViewer)
    { return o; }

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++)
    {
        var child = VisualTreeHelper.GetChild(o, i);

        var result = GetScrollViewer(child);
        if (result == null)
        {
            continue;
        }
        else
        {
            return result;
        }
    }
    return null;
}

然后你可以像這樣使用 .LineUp() 和 .LineDown() :

private void OnScrollUp(object sender, RoutedEventArgs e)
{
    var scrollViwer = GetScrollViewer(uiListView) as ScrollViewer;

    if (scrollViwer != null)
    {
       // Logical Scrolling by Item
       // scrollViwer.LineUp();
       // Physical Scrolling by Offset
       scrollViwer.ScrollToVerticalOffset(scrollViwer.VerticalOffset + 3);
    }
}

private void OnScrollDown(object sender, RoutedEventArgs e)
{
    var scrollViwer = GetScrollViewer(uiListView) as ScrollViewer;

    if (scrollViwer != null)
    {
        // Logical Scrolling by Item
        // scrollViwer.LineDown();
        // Physical Scrolling by Offset
        scrollViwer.ScrollToVerticalOffset(scrollViwer.VerticalOffset + 3);
    }
}


<DockPanel>
    <Button DockPanel.Dock="Top"
            Content="Scroll Up"
            Click="OnScrollUp" />
    <Button DockPanel.Dock="Bottom"
            Content="Scroll Down"
            Click="OnScrollDown" />
    <ListView x:Name="uiListView">
        <!-- Content -->
    </ListView>
</DockPanel>

LineUp 和 LineDown 公開的邏輯滾動仍然按項目滾動,如果你想滾動一定數量,你應該使用我上面使用的 ScrollToHorizontal/VerticalOffset。 如果您還想要一些更復雜的滾動,請查看我在另一個問題中提供的答案。

你試過ScrollIntoView嗎? 或者,如果它不是您帶入視圖的特定項目,而是當前 position 的偏移量,您可以使用BringIntoView

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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