wpf中怎么查找控件啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf中怎么查找控件啊相关的知识,希望对你有一定的参考价值。

这句winfrom 代码 Control title = (Control)(Controls.Find("label_title_ct", true)[0]);
wpf中怎么写啊

wpf由于大量使用模板,有时模板内的控件名称会不太方便查找,这时需要借助VisualTreeHelper和递归。

public static T FindChild<T>(DependencyObject parent, string childName)
   where T : DependencyObject
    
  if (parent == null) return null;

  T foundChild = null;

  int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
  for (int i = 0; i < childrenCount; i++)
  
    var child = VisualTreeHelper.GetChild(parent, i);
    // 如果子控件不是需查找的控件类型
    T childType = child as T;
    if (childType == null)
    
      // 在下一级控件中递归查找
      foundChild = FindChild<T>(child, childName);

      // 找到控件就可以中断递归操作 
      if (foundChild != null) break;
    
    else if (!string.IsNullOrEmpty(childName))
    
      var frameworkElement = child as FrameworkElement;
      // 如果控件名称符合参数条件
      if (frameworkElement != null && frameworkElement.Name == childName)
      
        foundChild = (T)child;
        break;
      
    
    else
    
      // 查找到了控件
      foundChild = (T)child;
      break;
    
  

  return foundChild;

调用方法是这样的:

TextBox foundTextBox = 
   UIHelper.FindChild<TextBox>(Application.Current.MainWindow, "myTextBoxName");

参考技术A

简单好用,

 /// <summary>
        /// 获取子控件
        /// </summary>
        /// <typeparam name="T">子控件类型</typeparam>
        /// <param name="obj">父控件</param>
        /// <param name="name">名称</param>
        /// <returns></returns>
        public static T GetChildObject<T>(DependencyObject obj, string name) where T : FrameworkElement
        
            DependencyObject child = null;
            T grandChild = null;
            for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
            
                child = VisualTreeHelper.GetChild(obj, i);


                if (child is T && (((T)child).Name == name && !string.IsNullOrEmpty(name)))
                
                    return (T)child;
                
                else
                
                    grandChild = GetChildObject<T>(child, name);
                    if (grandChild != null)
                        return grandChild;
                
            
            return null;
        

参考技术B 楼上的是可以查出的,不过如果在DataGrid模板列里面用这种方法好像就不行了。 参考技术C FrameworkElement.

FindName 方法
查找具有提供的标识符名称(x:name)的元素。追问

Label title = (Label)FrameworkElement.FindName("label_cszs_title" );
我写完后是错误的非静态方法或字段

追答

this.FindName

FrameworkElement指定父控件

wpf文件用啥打开?

这个格式文件没见过,是什么文件啊?怎么打开啊?

WinFX是下一代的Windows API,而WPF将是WinFX的核心一部分,用于处理UI, Document, Media和用户交互。

微软关于WPF的网站:http://msdn.microsoft.com/windowsvista/building/presentation/

最新2月份的用户预览版可以从这里下载: http://msdn.microsoft.com/windowsvista/getthebeta/default.aspx

在msdn上有两个WPF讨论组:

1) http://forums.microsoft.com/msdn/ShowForum.aspx?ForumID=119

2) http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.windows.developer.winfx.avalon&lang=en&cr=US

另外还有几个关于WPF的Blog:

http://blogs.msdn.com/tims/ TimSneath的Blog

http://blogs.msdn.com/atc_avalon_team/default.aspx 这是微软工程院Avalon组的Blog

http://blogs.msdn.com/okoboji/ Kevin Moore (WPF PM)的blog

http://blogs.msdn.com/tims/articles/475132.aspx Tim Sneath给了一个WPF相关Blogger的列表

http://microsoft.sitestream.com/PDC05/ PDC05的一些Talk和Demo
参考技术A 请参考这里
http://zhidao.baidu.com/question/8761007.html
参考技术B 用金山的打开试一下呢?

以上是关于wpf中怎么查找控件啊的主要内容,如果未能解决你的问题,请参考以下文章

WPF的控件没有句柄,但是有啥其他间接方法获得WPF控件的句柄啊。

WPF的控件没有句柄,但是有啥其他间接方法获得WPF控件的句柄啊。

WPF怎么把一个控件的值绑定到一个变量啊?

wpf里面类似 SplitterPanel SplitterItem 功能的控件怎么实现啊,可以拖放和停靠在窗体上

WPF ComboBox控件隐藏倒三角

wpf 重新加载自定义控件出现异常