【问题标题】:Find WPF Controls in Viewport在视口中查找 WPF 控件
【发布时间】:2011-05-11 09:35:52
【问题描述】:

更新:

这可能是一个简单或复杂的问题,但在 wpf 中,我有一个列表框,我用列表中的 datatemplate 填充该列表框。

有没有办法找出特定的数据模板项是否在视口中,即我已经滚动到它的位置并且它是可见的?

目前我挂上了 listbox_ScrollChanged 事件,这给了我 ScrollChangedEventArgs,但我还没有找到合适的属性...

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    this问题

    对于特定的 ListBox,您可以这样做

    private bool IsControlVisibleToUser(Control control)
    {
        ListBoxItem listBoxItem =
            listBox.ItemContainerGenerator.ContainerFromItem(control) as ListBoxItem;
        if (listBoxItem != null)
        {
            return IsUserVisible(listBoxItem, listBox);
        }
        return false;
    }
    

    以及我链接的问题中的方法

    private bool IsUserVisible(FrameworkElement element, FrameworkElement container)
    {
        if (!element.IsVisible)
            return false;
        Rect bounds = element.TransformToAncestor(container).TransformBounds(new Rect(0.0, 0.0, element.ActualWidth, element.ActualHeight));
        Rect rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight);
        return rect.Contains(bounds.TopLeft) || rect.Contains(bounds.BottomRight);
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多