wpf datagrid中当前可见的列

时间:2018-07-12 06:57:38

标签: wpf

我有一个超过15列的数据网格并且水平滚动条是可见的。如何检查wpf中当前是否在屏幕上可见一个数据网格列。

1 个答案:

答案 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");
}

至少它为您提供了一种检查是否显示特定列的方法。您必须根据具体情况对其进行调整。