【问题标题】:Currently visible columns in a wpf datagridwpf 数据网格中当前可见的列
【发布时间】:2018-12-20 07:11:14
【问题描述】:

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

【问题讨论】:

  • 你能分享一些代码,或者多解释一下你的问题吗?
  • 我有一个 19 列的数据网格。屏幕上一次只显示 5 或 6 列,其他列可以通过滚动水平滚动条来显示。而且列的宽度是可调的.我想限制第一列和最后一列之间的滚动。我使用 FrozenColumnCount 属性来冻结第一列。但无法冻结最后一列。所以我试图通过自定义来冻结最后一列。为此,我想知道屏幕上当前显示了多少列。你能帮忙吗?

标签: wpf


【解决方案1】:

这似乎有效:

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

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

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 2013-08-10
    • 1970-01-01
    • 2011-06-14
    • 2023-03-30
    • 1970-01-01
    • 2015-08-16
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多