一、目的:在开发过程中,经常会需要把枚举绑定到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个人主页-哔哩哔哩视频