示例:WPF中应用MarkupExtention自定义IValueConverter

一、目的:应用MarkupExtention定义IValueConverter,使得应用起来更简单和高效


二、实现

public abstract class MarkupValueConverterBase : MarkupExtension, IValueConverter
    {
        public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);

        public virtual object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }

三、环境


VS2022,.Net 7

四、示例

自定义一个DateTime时间转换年龄的转化器

    public class GetAgeConverter : MarkupValueConverterBase
    {
        public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is DateTime dateTime)
            {
                DateTime now = DateTime.Now;
                int age = now.Year - dateTime.Year;
                if (now.Month < dateTime.Month || (now.Month == dateTime.Month && now.Day < dateTime.Day))
                {
                    age--;
                }
                return age > 0 ? age : 0;
            }
            return this.DefaultValue;
        }
    }

使用方法

            <TextBlock Text="{Binding Source={x:Static s:DateTime.MinValue},Converter={local:GetAgeConverter DefaultValue=50}}"/>

 输出结果

五、需要了解的知识点

IValueConverter 接口 (System.Windows.Data) | Microsoft Learn

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

相关推荐

  1. wpf 定义 一个事件聚合定义示例

    2024-06-17 14:26:06       26 阅读
  2. C#--WPF定义控件模板示例

    2024-06-17 14:26:06       35 阅读
  3. wpf引用定义字体

    2024-06-17 14:26:06       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-17 14:26:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-17 14:26:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-17 14:26:06       87 阅读
  4. Python语言-面向对象

    2024-06-17 14:26:06       96 阅读

热门阅读

  1. 代码随想三刷栈与队列篇

    2024-06-17 14:26:06       36 阅读
  2. 学习笔记——交通安全分析06

    2024-06-17 14:26:06       29 阅读
  3. PHP框架详解 - symfony框架

    2024-06-17 14:26:06       33 阅读
  4. Web前端三大主流框架介绍

    2024-06-17 14:26:06       27 阅读
  5. Android 放大镜代码

    2024-06-17 14:26:06       38 阅读
  6. ThreadLocal 详讲

    2024-06-17 14:26:06       22 阅读
  7. FileUtils类中常用方法的介绍

    2024-06-17 14:26:06       28 阅读
  8. HIVE及SparkSQL优化经验

    2024-06-17 14:26:06       35 阅读
  9. Docker Desktop Installer For Windows 国内下载地址

    2024-06-17 14:26:06       57 阅读