如何通过行和列索引以编程方式访问 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 中的控件?的主要内容,如果未能解决你的问题,请参考以下文章