【问题标题】:WPF ListBox Scrolling and Button VisibilityWPF ListBox 滚动和按钮可见性
【发布时间】:2012-04-17 08:52:55
【问题描述】:

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

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

我正在跨多个列表框实现此功能,并且没有设置项目/列表框的大小。我希望有一些事件可以像“scrollviewer_initializeed”之类的东西。

【问题讨论】:

标签: wpf listbox


【解决方案1】:

将 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,您的按钮应该是可见的。

【讨论】:

    【解决方案2】:

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

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

    滚动查看器的样式示例是here,但我相信您可以通过快速搜索找到更好的样式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 2011-10-03
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      相关资源
      最近更新 更多