c# - 在视口(viewport)中查找 WPF 控件

标签 c# .net wpf

更新:

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

有没有办法找出特定的数据模板项是否在视口(viewport)中,即我已滚动到其位置并且可以查看它?

目前,我连接到了 listbox_ScrollChanged 事件,这给了我 ScrollChangedEventArgs,但我还没有找到正确的属性...

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

最佳答案

参见this问题

对于特定的列表框,您可以这样做

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

关于c# - 在视口(viewport)中查找 WPF 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4204342/

相关文章:

.net - Silverlight是否要求安装.NET框架?

c# - 通过运行时加载 XAML XML?

.net - 在 WPF 组合框中查找项目

c# - 如何开始使用 MVVM 模型实现串口控制?

c# - ClosedXML - 单元格内的回车

c# - 获取连接的 USB 设备列表

.net - 使用 .NET 的 Reflection.Emit 生成接口(interface)

.net - 如何在 Visual Studio 2010 中引用 WPF 工具包?

c# - 在 C# 中的 JSON.net 对象中搜索嵌套值

c# - 限制任务并行库中的线程数