0

在我的XAML我有以下stackpanel可以包含元素列表,其中一些将是数据网格(有些不是)

    <ScrollViewer Name="MainScrollViewer" Grid.Row="0">
        <StackPanel Name="MainStackPanel">
            // label
            // datagrid
            // label
            // button
            // datagrid
            // .....
        </StackPanel>
    </ScrollViewer>

并且它们的名称和datagrids数量是动态的(我不知道前面)。

在我的 XAML.CS 中,我需要执行以下操作 - 对于datagrid我的每个stackpanel - 打印它

现在我知道如何打印(这不是问题),但我很难找出如何访问数据网格中的所有元素stackpanel以及仅以某种方式访问​​数据网格......FOREACH

有什么线索吗?

4

3 回答 3

2
foreach (DataGrid dataGrid in MainStackPanel.Children.OfType<DataGrid>())
{

}

或者

 foreach (UIElement child in MainStackPanel.Children)
        {
            DataGrid dataGrid = child as DataGrid;
            if (dataGrid != null)
            {
                //your code here
            }
        }
于 2013-04-26T04:08:54.423 回答
0

请参见下面的示例。由于StackPanel'sChildren 属性包含 a UIElementCollection,因此您可以遍历它,查找所需的控件类型。

private StackPanel _stackPanelContainer = MainStackPanel; // Get a reference to the StackPanel w/ all the UI controls

// Since StackPanel contains a "List" of children, you can iterate through each UI Control inside it
//
foreach (var child in _stackPanelContainer.Children)
{
   // Check to see if the current UI Control being iterated over is a DataGrid
   //
   if (child is DataGrid)
   {
       // perform DataGrid printing here, using the child variable
   }
}
于 2013-04-26T07:54:39.510 回答
0

你可以试试这个方法。未测试,希望有效:

    List <DataGrid> dataGridList = new List<DataGrid>();

    for (int i = 0; i < MainStackPanel.Children.Count; i++)
    {
        if (typeof(DataGrid) == MainStackPanel.Children[i].GetType())
        {
            dataGridList.Add((DataGrid) MainStackPanel.Children[i]);
        }
    }

    foreach(DataGrid dg in dataGridList)
    {
        // add your code
    }
于 2013-04-26T05:35:36.540 回答