rmo*_*ore 30
是的,您必须从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;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用.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>
Run Code Online (Sandbox Code Playgroud)
LineUp和LineDown公开的逻辑滚动仍然按项目滚动,如果你想按设定的数量滚动,你应该使用我上面使用过的ScrollToHorizontal/VerticalOffset.如果你想要一些更复杂的滚动,那么看看我在另一个问题中提供的答案.
| 归档时间: |
|
| 查看次数: |
19718 次 |
| 最近记录: |