我有一个超过15列的数据网格并且水平滚动条是可见的。如何检查wpf中当前是否在屏幕上可见一个数据网格列。
答案 0 :(得分:0)
这似乎可行:
public static bool IsVisibleInView(FrameworkElement element, FrameworkElement container)
{
if (!element.IsVisible) return false;
var bounds = element.TransformToAncestor(container).TransformBounds(new Rect(0.0, 0.0,
element.ActualWidth, element.ActualHeight));
var rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight);
return rect.Contains(bounds.TopLeft) || rect.Contains(bounds.BottomRight);
}
public void Button_Click(object sender, RoutedEventArgs e)
{
var row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(0);
System.Windows.MessageBox.Show(IsVisibleInView(grid.Columns.Last().GetCellContent(row),
grid) ? "Visible" : "Invisible");
}
至少它为您提供了一种检查是否显示特定列的方法。您必须根据具体情况对其进行调整。