Пользовательский элемент управления ListView - PullRequest
0 голосов
/ 19 февраля 2011

Итак, я искал решение более 12 часов (но безуспешно). Как мне изменить ListView ControlTemplate, чтобы получить такой эффект:

enter image description here

(Этот вопрос касается кнопок, которые работают как прокрутка)

У вас есть другие идеи, как создать такой контроль?

1 Ответ

1 голос
/ 19 февраля 2011

Это вертикальное представление, но идея понятна: скрыть полосы прокрутки и манипулировать ими вручную.Для более отзывчивого пользовательского интерфейса вам нужно подписаться на событие MouseDown вместо Click, также возможны исключения NullReference в каждой строке Grid_Click ().

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));
    }

Магическое число 2 в GetChild () является индексом ScrollViewer внутри его родителя (Grid).

...