翼度科技»论坛 编程开发 .net 查看内容

WPF控件轻松查找:通用类库助您按名称或类型定位控件

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
 
概述:WPF中按名称或类型查找控件可通过通用类库实现。提供的`ControlFinder`类库包含方法,可轻松在VisualTree中查找并操作WPF控件。通过示例展示了按名称和按类型查找按钮和文本框的用法,增强了控件查找的便捷性。
在WPF中,按名称或类型查找控件通常涉及使用FindName方法或递归遍历VisualTree。下面提供一个通用的类库,其中包括按名称和按类型查找控件的方法:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows;
  5. using System.Windows.Controls;
  6. namespace WpfControlFinder
  7. {
  8.     public static class ControlFinder
  9.     {
  10.         // 按名称查找控件
  11.         public static T FindByName<T>(FrameworkElement parent, string name) where T : FrameworkElement
  12.         {
  13.             return FindControls<T>(parent, c => c.Name == name).FirstOrDefault();
  14.         }
  15.         // 按类型查找控件
  16.         public static T FindByType<T>(FrameworkElement parent) where T : FrameworkElement
  17.         {
  18.             return FindControls<T>(parent, c => c.GetType() == typeof(T)).FirstOrDefault();
  19.         }
  20.         // 递归查找控件
  21.         private static IEnumerable<T> FindControls<T>(DependencyObject parent, Func<T, bool> condition) where T : FrameworkElement
  22.         {
  23.             var controls = new List<T>();
  24.             for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
  25.             {
  26.                 var child = VisualTreeHelper.GetChild(parent, i);
  27.                 if (child is T t && condition(t))
  28.                 {
  29.                     controls.Add(t);
  30.                 }
  31.                 controls.AddRange(FindControls<T>(child, condition));
  32.             }
  33.             return controls;
  34.         }
  35.     }
  36. }
复制代码
下面是一个简单的WPF应用的示例代码,演示了如何使用这个类库:
  1. using System.Windows;
  2. namespace WpfControlFinderExample
  3. {
  4.     public partial class MainWindow : Window
  5.     {
  6.         public MainWindow()
  7.         {
  8.             InitializeComponent();
  9.             // 在MainWindow中按名称查找Button
  10.             var buttonByName = ControlFinder.FindByName<Button>(this, "myButton");
  11.             
  12.             // 在MainWindow中按类型查找TextBox
  13.             var textBoxByType = ControlFinder.FindByType<TextBox>(this);
  14.             // 执行一些操作
  15.             if (buttonByName != null)
  16.             {
  17.                 buttonByName.Content = "已找到";
  18.             }
  19.             if (textBoxByType != null)
  20.             {
  21.                 textBoxByType.Text = "已找到";
  22.             }
  23.         }
  24.     }
  25. }
复制代码
在这个例子中,ControlFinder类提供了FindByName和FindByType两个方法,分别用于按名称和按类型查找控件。这可以在WPF应用程序中方便地查找和操作控件。
源代码获取:https://pan.baidu.com/s/1rG4OiWH73I0Hac1VgzDXUQ?pwd=6666 
 



来源:https://www.cnblogs.com/hanbing81868164/p/18103339
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具