How do I access the ui element at a row/cell in my GridView?

Platform: WPF| Category: ListView

The following utility class (provided in this thread: Accessing and Mondifying DataTemplate Element Runtime for CellTemplate should help you achieve this:

[C#]
    public static class ListViewHelper 
    { 
        public static FrameworkElement GetElementFromCellTemplate(ListView listView, Int32 column, Int32 row, String name) 
        { 
            if (row >= listView.Items.Count || row < 0) 
            { 
                throw new ArgumentOutOfRangeException('row'); 
            } 
            GridView gridView = listView.View as GridView; 

            if (gridView == null) { return null; } 
            
            if (column >= gridView.Columns.Count || column < 0) 
            { 
                throw new ArgumentOutOfRangeException('column'); 
            } 
            
            ListViewItem item = listView.ItemContainerGenerator.ContainerFromItem(listView.Items[row]) as ListViewItem; 
            
            if (item != null) 
            { 
                GridViewRowPresenter rowPresenter = GetFrameworkElementByName(item); 
                
                if (rowPresenter != null) 
                { 
                    ContentPresenter templatedParent = VisualTreeHelper.GetChild(rowPresenter, column) as ContentPresenter; 
                    DataTemplate dataTemplate = gridView.Columns[column].CellTemplate; 
                    if (dataTemplate != null && templatedParent != null) 
                    { 
                        return dataTemplate.FindName(name, templatedParent) as FrameworkElement; 
                    } 
                } 
            } 
            return null; 
        } 
        private static T GetFrameworkElementByName(FrameworkElement referenceElement) where T : FrameworkElement 
        { 
            FrameworkElement child = null; 
            
            for (Int32 i = 0; i < VisualTreeHelper.GetChildrenCount(referenceElement); i++) 
            { 
                child = VisualTreeHelper.GetChild(referenceElement, i) as FrameworkElement; 
                System.Diagnostics.Debug.WriteLine(child); 
                if (child != null && child.GetType() == typeof(T)) 
                { 
                    break; 
                } 
                else if (child != null) 
                { 
                    child = GetFrameworkElementByName(child); 
                    if (child != null && child.GetType() == typeof(T)) 
                    { 
                        break; 
                    } 
                } 
            } 
            return child as T; 
        } 
    }

Share with

Related FAQs

Couldn't find the FAQs you're looking for?

Please submit your question and answer.