WPF ListBox滚动和按钮可见性

时间:2012-04-03 16:42:51

标签: wpf listbox

我正在使用“向上滚动”和“向下滚动”按钮替换列表视图的滚动条。我的问题是,有没有办法只在滚动列表框时显示按钮?

即。我的列表框可能只有几个项目......在这种情况下,我不需要显示按钮,因为没有什么可以滚动到。

我在多个列表框中实现这一点,并且没有设置大小的项目/ lisboxes。我希望有一些事件可以像“scrollviewer_initializeed”或其他东西一样挂钩。

2 个答案:

答案 0 :(得分:0)

最简单的解决方案是自定义样式滚动查看器:

只需将垂直滚动条的可见性设置为“自动”,并隐藏控件模板的所有部分,除了顶部和底部的“RepeatButton”部分。

enter image description here

设置scrollViewer样式的示例是here,但我确信您可以通过快速搜索找到更好的样式。

答案 1 :(得分:0)

将ListBox.ScrollView.VerticalScrollBarVisibility设置为Hidden并处理ListBox.ScrollView.ScrollChanged事件,如下所示:

<ListBox ScrollViewer.ScrollChanged="ListBox_ScrollChanged"
         ScrollViewer.VerticalScrollBarVisibility="Hidden" />

然后添加此方法来处理ScrollChanged事件:

private void ListBox_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
    ButtonScrollUp.Visibility = ButtonScrollDown.Visibility = 
        ((ScrollViewer)e.OriginalSource).ScrollableHeight > 0 
            ? Visibility.Visible 
            : Visibility.Collapsed;
}

这假设您的按钮名为ButtonScrollUp和ButtonScrollDown。

ScrollViewer.ScrollableHeight将等于视图之外的项目数,因此如果它大于0,则应该可以看到按钮。