如何在WPF中的StackPanel中预览datagrid?

时间:2013-04-26 03:52:34

标签: c# wpf

在我的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中的所有元素......

任何线索?

3 个答案:

答案 0 :(得分:2)

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

}

OR

 foreach (UIElement child in MainStackPanel.Children)
        {
            DataGrid dataGrid = child as DataGrid;
            if (dataGrid != null)
            {
                //your code here
            }
        }

答案 1 :(得分: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
    }

答案 2 :(得分:0)

请参阅下面的示例。由于StackPanel's Children属性包含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
   }
}