自定义ListView控件

时间:2011-02-18 21:42:25

标签: c# wpf xaml expression-blend

所以,我一直在寻找超过12小时的解决方案(但没有成功)。我应该如何更改ListView ControlTemplate以获得这样的效果:

enter image description here

(这个问题是关于像scrollview一样工作的按钮)

您是否有其他想法如何创建这样的控件?

1 个答案:

答案 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的索引。