Question

I have a WPF Window, where I put a ContentControl, Later in my code I use a string to be read as Xaml using XamlReader.Load function and put that in ContentControl. This is done to make a Dyanmic UI. Now all is done, but I want to capture the Input field values from this control. on button click.

So, all I want to do is to Iterate on Child Controls of ContentControl. How can I do this, there doesn't seems a way to iterate on child of it? Any Idea. Thanks.

Was it helpful?

Solution

Here, you can use VisualTreeHelper:

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(contentControl); i++)
        {
            var child = VisualTreeHelper.GetChild(contentControl, i);
            if(child is ContentPresenter)
            {
                var contentPresenter = child as ContentPresenter;
                for (int j = 0; j < VisualTreeHelper.GetChildrenCount(contentPresenter); j++)
                {
                    var innerChild = VisualTreeHelper.GetChild(contentPresenter, j);
                }

                break;
            }
        }

OTHER TIPS

The difference between the logical and visual tree is, that the visual tree lists all elements which are used to display the control. E.g. The visual tree of a button looks like

Button -> Border -> ContentPresenter -> TextBlock

The logical tree list just the controls itsself (as you declared in your xaml). For further details, visit this site: http://wpftutorial.net/LogicalAndVisualTree.html

So to get the children you want, LogicalTreeHelper.GetChildren(contentControl); should work.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top