Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get the ToggleButton from ComboBox Control

Tags:

c#

combobox

wpf

I was checking control template of ComboBox(http://msdn.microsoft.com/en-us/library/ms752094(v=vs.110).aspx), where they have used Toggle Button to toggle the Popup. Is there a way I could get the toggle button from code behind?

I had tried this, but to no avail :-(

var uiElement = (ComboBox)sender;
var toggleButton = uiElement.FindResource(typeof(ToggleButton)) as ToggleButton;
like image 854
Arun Selva Kumar Avatar asked Feb 20 '26 08:02

Arun Selva Kumar


1 Answers

If you now the name of the ToggleButton then you can use following code:

var uiElement = (ComboBox)sender;
var toggleButton = uiElement.Template.FindName("<Your ToggleButton Name Here>",uiElement) as ToggleButton;

if(toggleButton!=null)
{
     // Your code goes here.
}

If you don't know the name of the ToggleButton then in that case the only option is to travers through visual tree and find an element of type toggle button. Sample code below:

    internal static List<T> FindVisualChild<T>(this DependencyObject depObj) where T : DependencyObject
    {
        if (depObj != null)
        {
            List<T> childItems = null;
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
            {

                if (childItems == null)
                    childItems = new List<T>();

                DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                if (child != null && child is T)
                {
                    childItems.Add((T)child);
                }

                var recursiveChildItems = FindVisualChild<T>(child);
                if (recursiveChildItems != null && recursiveChildItems.Count > 0)
                    childItems.AddRange(recursiveChildItems);
            }
            return childItems;
        }
        return null;
    }

Above method is an extension to DependencyObject and will return all the elements of the specified type from the visual tree. If you want only first element of specified type then you can make slight changes in the method and can break the loop when you get the first element of the specified type and return it.

like image 140
Nitin Joshi Avatar answered Feb 22 '26 01:02

Nitin Joshi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!