WPF访问列表视图代码隐藏的滚动查看器

and*_*rea 5 c# wpf listview code-behind scrollviewer

我需要从代码隐藏访问列表视图的滚动查看器。这是我的列表视图的定义

<ListView Grid.Row="1" ItemsSource="{Binding Path=SpecList, UpdateSourceTrigger=PropertyChanged}"  
                            Name="mylistview"
                            ItemTemplate="{StaticResource SpecElementTemplate}"
                            Background="{StaticResource EnvLayout}"
                            ScrollViewer.HorizontalScrollBarVisibility="Visible"
                            ScrollViewer.VerticalScrollBarVisibility="Disabled"
                            ItemContainerStyle="{StaticResource MyStyle}"
                            BorderBrush="Blue"
                            BorderThickness="20"
                            Margin="-2">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得滚动查看器?

谢谢

安德烈亚

Fru*_*erg 7

有几种方法可以获取ScrollViewer. 最简单的解决方案是获取 的第一个孩子的第一个孩子ListView。这意味着像这个答案中描述的那样获取这个 BorderBorderScrollViewer内部和内部 :

// Get the border of the listview (first child of a listview)
Decorator border = VisualTreeHelper.GetChild(mylistview, 0) as Decorator;

// Get scrollviewer
ScrollViewer scrollViewer = border.Child as ScrollViewer;
Run Code Online (Sandbox Code Playgroud)

第二种方法是扫描所有孩子的递归以找到 ScrollViewer。这在马特汉密尔顿在这个问题的回答中有所描述。您可以简单地使用此函数来获取ScrollViewer.

ScrollViewer scrollViewer = GetChildOfType<ScrollViewer>(mylistview);
Run Code Online (Sandbox Code Playgroud)

这第二个解决方案更通用,如果您的模板ListView被编辑也可以使用。