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)
我怎样才能获得滚动查看器?
谢谢
安德烈亚
有几种方法可以获取ScrollViewer. 最简单的解决方案是获取 的第一个孩子的第一个孩子ListView。这意味着像这个答案中描述的那样获取这个 BorderBorder的ScrollViewer内部和内部
:
// 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被编辑也可以使用。