如何通过行和列索引以编程方式访问 WPF Grid 中的控件?

Posted

技术标签:

【中文标题】如何通过行和列索引以编程方式访问 WPF Grid 中的控件?【英文标题】:How to programmatically access Control in WPF Grid by row and column index? 【发布时间】:2009-10-02 20:49:17 【问题描述】:

将控件添加到 WPF 网格后,是否有办法通过行和/或列索引以编程方式访问它们?大致如下:

 var myControl = (object)MyGrid.GetChild(int row, int column);

...GetChild 是我希望我拥有的方法!

【问题讨论】:

【参考方案1】:

对此没有内置方法,但您可以通过查看 Children 集合轻松完成:

myGrid.Children
      .Cast<UIElement>()
      .First(e => Grid.GetRow(e) == row && Grid.GetColumn(e) == column);

【讨论】:

虽然 - 返回完整集合可能值得,因为从技术上讲,您可以在单个网格“单元格”中拥有多个元素,因为 hte 附加属性不会检查这一点。跨度> 谢谢。这是我到目前为止一直遵循的方法,遍历 Children 中的每个子项,直到找到一个具有匹配行和列的控件,但我预计会有更直接的方法。 谢谢,Reed,好点子——这可以通过使用 Where 而不是 First 轻松完成。 工作。谢谢。您可以投射和使用。例如:((Label)myGrid.Children[0]).Text="test";【参考方案2】:

This answer 会帮助你

int rowIndex = Grid.GetRow(myButton);

RowDefinition rowDef = myGrid.RowDefinitions[rowIndex];

【讨论】:

谢谢,但它不能完成这项工作,因为我没有对 myButton 的引用! 这正是我想要的。我确实有对该对象的引用,我只需要弄清楚它在哪一行和哪一列。谢谢,卡洛。【参考方案3】:

网格对象的 Children 属性将为您提供 Grid 的所有子项(来自 Panel 类)的集合。

至于获取网格中的坐标,看Grid类中的静态方法(GetRow() & GetColumn())。

希望能让你朝着正确的方向前进。

【讨论】:

【参考方案4】:

System::Windows::Controls::Grid^ myGrid = nullptr; System::Windows::Controls::UserControl^ pUserControl = nullptr;

myGrid = m_DlgOwnedObjAdmin->GrdProperties;
if (myGrid->Children->Count > 0)

    pUserControl = (System::Windows::Controls::UserControl^)myGrid->Children->default[0];
    if (pUserControl != nullptr)
    
        if (bValue == true)
            pUserControl->Visibility = System::Windows::Visibility::Visible;
        else
            pUserControl->Visibility = System::Windows::Visibility::Collapsed;
    

【讨论】:

【参考方案5】:

你可以给你的网格列/行一个名字

<Grid x:Name="MainGridBackground" Grid.Column="0"/>

并通过调用它并使用“.”以编程方式访问它

MainGridBackground.Background = canvasUCInstance.rectanglePreview.Fill;

【讨论】:

这似乎没有回答有关在网格中访问子控件的问题。 @LarsTech 它正在回答如何以编程方式访问网格,这是所要求的。网格的任何控件都可以通过以编程方式调用的网格名称访问。

以上是关于如何通过行和列索引以编程方式访问 WPF Grid 中的控件?的主要内容,如果未能解决你的问题,请参考以下文章

wpf 如何动态的设置Grid宽和高.

2021-08-17 WPF控件专题 Grid 控件详解

WPF如何取Grid获取其中的Button实例。

如何以编程方式将图像放入进度条(WPF)

如何从 WPF 中网格内的标签中获取行和列信息?

我可以以编程方式将元素添加到 XAML 吗? WPF c# [关闭]