【问题标题】:how to get the control added at the specified row and column in window control Grid?如何获取添加到窗口控件Grid中指定行和列的控件?
【发布时间】:2010-05-03 04:29:39
【问题描述】:

如何在窗口控件Grid(不是gridview或datagrid)中的指定行和列添加控件?在 C# 中

假设我们知道控件所在的行列,如何通过网格行列获取控件?

谢谢

【问题讨论】:

    标签: c# wpf wpf-controls


    【解决方案1】:

    嗯,你可以很容易地使用 LINQ 查询来做到这一点:

    public IEnumerable<UIElement> GetElementsAtPosition(Grid grid, int row, int column)
    {
        return grid.Children.OfType<UIElement>().Where(c => Grid.GetRow(c) == row && Grid.GetColumn(c) == column);
    }
    

    这需要返回一个IEnumerable,因为在给定的行和列交叉点可以有多个控件。如果您正在执行行/列跨越,这也不是很可靠(它不会捕捉到元素从不同的行或列开始并跨越到它的情况)。

    编辑感谢@wpfwannabe 提供了完成这项工作所需的正确 LINQ 运算符。 UIElementCollection 没有实现 IEnumerable

    【讨论】:

    • 谢谢。我应该使用命名空间 System.Linq 还是 ... 添加?
    • 我有 System.Linq,但 grid.Children 仍然有问题。请问我想念什么?谢谢
    • System.Windows.Controls.UIElementCollection' 不包含“Where”的定义,并且没有扩展方法“Where”接受“System.Windows.Controls.UIElementCollection”类型的第一个参数
    • 试试grid.Children.OfType&lt;UIElement&gt;.Where(c =&gt; Grid.GetRow(c) == row &amp;&amp; Grid.GetColumn(c) == column)
    • 对不起,我总是忘记集合没有实现 IEnumerable 感谢@wpfwannabe 的解决方案。
    猜你喜欢
    • 2013-11-05
    • 2014-04-22
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多