FindVisualChild reference issue

前端 未结 2 709
既然无缘
既然无缘 2020-12-03 19:40

I have found and modified following code in order to export my dataGrid to a pdf document using iTextSharp class.

private void ExportToPdf(DataGrid grid)
           


        
相关标签:
2条回答
  • 2020-12-03 20:10

    Also a common practice is to use these methods (posted by Rohit Vats) as extension methods, like this:

    static class Utils
    {
    
        public static IEnumerable<T> FindVisualChildren<T>(this DependencyObject depObj)
               where T : DependencyObject
        {
            ...
        }
    
        public static childItem FindVisualChild<childItem>(this DependencyObject obj)
            where childItem : DependencyObject
        {
            ...
        }
    
    }
    

    And then in your code:

    using Utils;
    
    class MyCode
    {
        public static DataGridCellsPresenter GetPresenter(DataGridRow row)
        {
            return row.FindVisualChild<DataGridCellsPresenter>();
        }
    }
    
    0 讨论(0)
  • 2020-12-03 20:17

    FindVisualChild method is not provided by WPF framework, you have to add them. May be you want this:

    public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj)
           where T : DependencyObject
    {
        if (depObj != null)
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                if (child != null && child is T)
                {
                    yield return (T)child;
                }
    
                foreach (T childOfChild in FindVisualChildren<T>(child))
                {
                    yield return childOfChild;
                }
            }
        }
    }
    
    public static childItem FindVisualChild<childItem>(DependencyObject obj)
        where childItem : DependencyObject
    {
        foreach (childItem child in FindVisualChildren<childItem>(obj))
        {
            return child;
        }
    
        return null;
    }
    

    Add these methods in some utility class so they can be reuse.

    0 讨论(0)
提交回复
热议问题