当前位置: 首页 > news >正文

示例:WPF中绑定枚举到ComboBox的方式

一、目的:在开发过程中,经常会需要把枚举绑定到ComboxBox下拉列表中,其实方法有很多,这里面通过MarkupExtension扩展GetEnumSourceExtension去绑定到列表


二、实现

定义GetEnumSourceExtension类

    public class GetEnumSourceExtension : System.Windows.Markup.MarkupExtension{private Type _enumType;public Type EnumType{get { return this._enumType; }set{if (value != this._enumType){if (null != value){Type enumType = Nullable.GetUnderlyingType(value) ?? value;if (!enumType.IsEnum)throw new ArgumentException("Type must be for an Enum.");}this._enumType = value;}}}public GetEnumSourceExtension(){}public GetEnumSourceExtension(Type enumType){this.EnumType = enumType;}public override object ProvideValue(IServiceProvider serviceProvider){if (null == this._enumType)throw new InvalidOperationException("This EnumType must be specified.");Type actualEnumType = Nullable.GetUnderlyingType(this._enumType) ?? this._enumType;Array enumVlues = Enum.GetValues(actualEnumType);if (actualEnumType == this._enumType)return enumVlues;Array tempArray = Array.CreateInstance(actualEnumType, enumVlues.Length + 1);enumVlues.CopyTo(tempArray, 1);return tempArray;}}

三、环境


VS2022

四、示例

应用GetEnumSourceExtension扩展绑定到ComboBox数据源

<ComboBox ItemsSource="{h:GetEnumSource EnumType={x:Type HorizontalAlignment}}"/>

 显示效果

五、需要了解的知识点

MarkupExtension 类 (System.Windows.Markup) | Microsoft Learn 

六、源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

七、了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

相关文章:

  • 多标签识别:JoyTag模型的图像标注革命【开源】
  • rabbitmq单机安装及性能测试
  • NAND闪存市场彻底复苏
  • hive split 特殊用法
  • 如何在WordPress中上传多种安装包文件
  • 第一章 基本指令
  • Qt 信号与槽机制概述
  • 早期发现,健康生活!第三届ZAODX世界肿瘤早筛大会圆满落幕!
  • JAVAEE值之网络原理(1)_用户数据报协议(UDP)、概念、特点、结构、代码实例
  • 2024-6-14(沉默Nginx)
  • 30.保存游戏配置到文件
  • 【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
  • ripro主题如何使用memcached来加速
  • 【多线程实例】
  • Google Earth Engine(GEE)——计算闪闪红星的ndvi的值和直方图(时序分析)
  • 分享一款快速APP功能测试工具
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Docker入门(二) - Dockerfile
  • Effective Java 笔记(一)
  • flutter的key在widget list的作用以及必要性
  • HTML中设置input等文本框为不可操作
  • JAVA之继承和多态
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • React Native移动开发实战-3-实现页面间的数据传递
  • Redash本地开发环境搭建
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • use Google search engine
  • 从setTimeout-setInterval看JS线程
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 前言-如何学习区块链
  • 世界上最简单的无等待算法(getAndIncrement)
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​TypeScript都不会用,也敢说会前端?
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #Java第九次作业--输入输出流和文件操作
  • #Linux(Source Insight安装及工程建立)
  • #面试系列-腾讯后端一面
  • (done) 声音信号处理基础知识(2) (重点知识:pitch)(Sound Waveforms)
  • (done) 声音信号处理基础知识(4) (Understanding Audio Signals for ML)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (备忘)Java Map 遍历
  • (分布式缓存)Redis分片集群
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (回溯) LeetCode 78. 子集
  • (篇九)MySQL常用内置函数
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • **PHP分步表单提交思路(分页表单提交)
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net refrector
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .net中的Queue和Stack
  • @AliasFor注解