所以,我一直在寻找超过12小时的解决方案(但没有成功)。我应该如何更改ListView ControlTemplate以获得这样的效果:
(这个问题是关于像scrollview一样工作的按钮)
您是否有其他想法如何创建这样的控件?
答案 0 :(得分:1)
它是垂直表示,但理解是:隐藏滚动条并手动操作它们。对于响应更快的UI,您需要订阅MouseDown事件而不是Click,在Grid_Click()的每一行上也可以使用NullReference异常。
XAML:
<ListView.Template>
<ControlTemplate>
<Grid ButtonBase.Click="Grid_Click">
<Grid.RowDefinitions>
<RowDefinition Height="16"/>
<RowDefinition Height="*"/>
<RowDefinition Height="16"/>
</Grid.RowDefinitions>
<Button Content="^" Grid.Row="0"/>
<Button Content="v" Grid.Row="2"/>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Hidden">
<ItemsPresenter/>
</ScrollViewer>
</Grid>
</ControlTemplate>
</ListView.Template>
代码:
private void Grid_Click(object sender, RoutedEventArgs e) {
bool down = (e.OriginalSource as Button).Content as string == "v";
var scroller = VisualTreeHelper.GetChild((e.OriginalSource as Button).Parent, 2) as ScrollViewer;
scroller.ScrollToVerticalOffset(scroller.VerticalOffset + (down ? 1 : -1));
}
GetChild()中的神奇数字2是其父级(Grid)内ScrollViewer的索引。