如何访问ItemsControl-> ItemTemplate-> DataTemplate-> StackPanel中的按钮? wpf c#

时间:2018-02-25 23:41:36

标签: c# wpf xaml binding

如何从xaml中的此结构中获取代码中的按钮?

id_token
  • 我尝试使用名称

  • 获取stackpanel
  • 试图从许多id_token es

  • 中获取它

1 个答案:

答案 0 :(得分:1)

您可以使用VisualTreeHelper获取窗口当前可视树上的元素。

为方便起见,您可以使用以下扩展方法,该方法可以在可视树上以递归方式查找具有指定类型或条件的所有子元素。

public static class DependencyObjectExtensions
{
    public static IEnumerable<T> GetChildren<T>(this DependencyObject p_element, Func<T, bool> p_func = null) where T : UIElement
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(p_element); i++)
        {
            UIElement child = VisualTreeHelper.GetChild(p_element, i) as FrameworkElement;
            if (child == null)
            {
                continue;
            }

            if (child is T)
            {
                var t = (T)child;
                if (p_func != null && !p_func(t))
                {
                    continue;
                }

                yield return t;
            }
            else
            {
                foreach (var c in child.GetChildren(p_func))
                {
                    yield return c;
                }
            }
        }
    }
}

然后当窗口加载时,你可以得到这样的所有按钮:

var buttons = this.cat1.GetChildren<Button>().ToList();