WPF笔记: 使用依赖属性及寻找父子控件
(转载请注明来源:cnblogs coder-fang)
创建静态UI类:
static class BaseUI { public static readonly DependencyProperty ShowStatusProperty = DependencyProperty.Register("ShowStatus", typeof(int), typeof(UIElement)); public static T FindParent<T>(DependencyObject i_dp) where T : DependencyObject { DependencyObject dobj = (DependencyObject)VisualTreeHelper.GetParent(i_dp); if (dobj != null) { if (dobj is T) { return (T)dobj; } else { dobj = FindParent<T>(dobj); if (dobj != null && dobj is T) { return (T)dobj; } } } return null; } public static childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is childItem) return (childItem)child; else { childItem childOfChild = FindVisualChild<childItem>(child); if (childOfChild != null) return childOfChild; } } return null; } }
2. 使用依赖属性:
public class ParamGroupBox:GroupBox { public int ShowStatus { get { return (int)GetValue(BaseUI.ShowStatusProperty); } set { SetValue(BaseUI.ShowStatusProperty, value); UpdateUI(); } } public ParamGroupBox() { ShowStatus = 0; this.DataContextChanged += ParamGroupBox_DataContextChanged; ; } private void ParamGroupBox_DataContextChanged(object sender, System.Windows.DependencyPropertyChangedEventArgs e) { UpdateUI(); } public void UpdateUI() { if (ShowStatus == 0) { this.Visibility = Visibility.Visible; this.IsEnabled = true; } else if (ShowStatus == 1) { this.Visibility = Visibility.Visible; this.IsEnabled = false; } else { this.Visibility = Visibility.Hidden; this.IsEnabled = false; } } }
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 协程本质是函数加状态机——零基础深入浅出 C++20 协程
· 编码之道,道心破碎。
· 记一次 .NET 某发证机系统 崩溃分析
· 微服务架构学习与思考:SOA架构与微服务架构对比分析
· tomcat为什么假死了
· 知名开源项目Alist被收购!惹程序员众怒,开团炮轰甲方
· 突发,小红书开发者后门被破解?!
· 历时半年,我将一个大型asp.net的零代码快速开发平台转成了java
· [原创]《C#高级GDI+实战:从零开发一个流程图》第03章:画一个线,连接两个矩形!
· C# 将 CSV 转化为 Excel