如果列表视图的垂直滚动条在 c# wpf 中'Auto'可见性,如何知道它是否可见?



我有一个listview(检查列表)- 标题上有checkbox以选择列表中的所有项目

现在,我担心用户应该无法选择列表中不可见的项目(由于VerticalScrollBar而隐藏)

我有2个解决方案可以解决这个问题

  1. 仅选择列表中可见的那些项目(这似乎很困难)
  2. 禁用选择所有checkbox,如果有垂直滚动条可见

我要采用第二个解决方案,其中我需要知道verticalScrollBar是否出现。

如果ListView的可见性为"自动",如何知道VerticalScrollbar是否可见?

您可以使用

ScrollViewer

ScrollViewer sv = FindVisualChild<ScrollViewer>(myListView);
Visibility VerticalScrollbarVisibility = sv .ComputedVerticalScrollBarVisibility;

来自 MSDN 的 FindVisualChild 实现示例

private childItem FindVisualChild<childItem>(DependencyObject obj) 
       where childItem : DependencyObject
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(obj, i);
            if (child != null && child is childItem)
                return (childItem)child;
            else
            {
                childItem childOfChild = FindVisualChild<childItem>(child);
                if (childOfChild != null)
                    return childOfChild;
            }
        }
        return null;
    } 

最新更新