WPF技巧-常用的Converter集合(更新ing)

### 文章目录

  • [@toc](#文章目录 @[toc] 🧩 示例 1:BooleanToVisibilityConverter 🧩 示例 2:InvertedBooleanToVisibilityConverter 🧩 示例 3:StringToColorConverter 🧩 示例 4:StringToBrushConverter 🧩 示例 5:NullToVisibilityConverter 🧩 示例 6:EnumToVisibilityConverter 🧩 示例 7:DoubleToOpacityConverter ✅ 注册与使用方式(XAML) 1. 在资源中注册: 2. 在绑定中使用:)
  • [🧩 示例 1:`BooleanToVisibilityConverter`](#文章目录 @[toc] 🧩 示例 1:BooleanToVisibilityConverter 🧩 示例 2:InvertedBooleanToVisibilityConverter 🧩 示例 3:StringToColorConverter 🧩 示例 4:StringToBrushConverter 🧩 示例 5:NullToVisibilityConverter 🧩 示例 6:EnumToVisibilityConverter 🧩 示例 7:DoubleToOpacityConverter ✅ 注册与使用方式(XAML) 1. 在资源中注册: 2. 在绑定中使用:)
  • [🧩 示例 2:`InvertedBooleanToVisibilityConverter`](#文章目录 @[toc] 🧩 示例 1:BooleanToVisibilityConverter 🧩 示例 2:InvertedBooleanToVisibilityConverter 🧩 示例 3:StringToColorConverter 🧩 示例 4:StringToBrushConverter 🧩 示例 5:NullToVisibilityConverter 🧩 示例 6:EnumToVisibilityConverter 🧩 示例 7:DoubleToOpacityConverter ✅ 注册与使用方式(XAML) 1. 在资源中注册: 2. 在绑定中使用:)
  • [🧩 示例 3:`StringToColorConverter`](#文章目录 @[toc] 🧩 示例 1:BooleanToVisibilityConverter 🧩 示例 2:InvertedBooleanToVisibilityConverter 🧩 示例 3:StringToColorConverter 🧩 示例 4:StringToBrushConverter 🧩 示例 5:NullToVisibilityConverter 🧩 示例 6:EnumToVisibilityConverter 🧩 示例 7:DoubleToOpacityConverter ✅ 注册与使用方式(XAML) 1. 在资源中注册: 2. 在绑定中使用:)
  • [🧩 示例 4:`StringToBrushConverter`](#文章目录 @[toc] 🧩 示例 1:BooleanToVisibilityConverter 🧩 示例 2:InvertedBooleanToVisibilityConverter 🧩 示例 3:StringToColorConverter 🧩 示例 4:StringToBrushConverter 🧩 示例 5:NullToVisibilityConverter 🧩 示例 6:EnumToVisibilityConverter 🧩 示例 7:DoubleToOpacityConverter ✅ 注册与使用方式(XAML) 1. 在资源中注册: 2. 在绑定中使用:)
  • [🧩 示例 5:`NullToVisibilityConverter`](#文章目录 @[toc] 🧩 示例 1:BooleanToVisibilityConverter 🧩 示例 2:InvertedBooleanToVisibilityConverter 🧩 示例 3:StringToColorConverter 🧩 示例 4:StringToBrushConverter 🧩 示例 5:NullToVisibilityConverter 🧩 示例 6:EnumToVisibilityConverter 🧩 示例 7:DoubleToOpacityConverter ✅ 注册与使用方式(XAML) 1. 在资源中注册: 2. 在绑定中使用:)
  • [🧩 示例 6:`EnumToVisibilityConverter`](#文章目录 @[toc] 🧩 示例 1:BooleanToVisibilityConverter 🧩 示例 2:InvertedBooleanToVisibilityConverter 🧩 示例 3:StringToColorConverter 🧩 示例 4:StringToBrushConverter 🧩 示例 5:NullToVisibilityConverter 🧩 示例 6:EnumToVisibilityConverter 🧩 示例 7:DoubleToOpacityConverter ✅ 注册与使用方式(XAML) 1. 在资源中注册: 2. 在绑定中使用:)
  • [🧩 示例 7:`DoubleToOpacityConverter`](#文章目录 @[toc] 🧩 示例 1:BooleanToVisibilityConverter 🧩 示例 2:InvertedBooleanToVisibilityConverter 🧩 示例 3:StringToColorConverter 🧩 示例 4:StringToBrushConverter 🧩 示例 5:NullToVisibilityConverter 🧩 示例 6:EnumToVisibilityConverter 🧩 示例 7:DoubleToOpacityConverter ✅ 注册与使用方式(XAML) 1. 在资源中注册: 2. 在绑定中使用:)
  • [✅ 注册与使用方式(XAML)](#文章目录 @[toc] 🧩 示例 1:BooleanToVisibilityConverter 🧩 示例 2:InvertedBooleanToVisibilityConverter 🧩 示例 3:StringToColorConverter 🧩 示例 4:StringToBrushConverter 🧩 示例 5:NullToVisibilityConverter 🧩 示例 6:EnumToVisibilityConverter 🧩 示例 7:DoubleToOpacityConverter ✅ 注册与使用方式(XAML) 1. 在资源中注册: 2. 在绑定中使用:)
  • [1. 在资源中注册:](#文章目录 @[toc] 🧩 示例 1:BooleanToVisibilityConverter 🧩 示例 2:InvertedBooleanToVisibilityConverter 🧩 示例 3:StringToColorConverter 🧩 示例 4:StringToBrushConverter 🧩 示例 5:NullToVisibilityConverter 🧩 示例 6:EnumToVisibilityConverter 🧩 示例 7:DoubleToOpacityConverter ✅ 注册与使用方式(XAML) 1. 在资源中注册: 2. 在绑定中使用:)
  • [2. 在绑定中使用:](#文章目录 @[toc] 🧩 示例 1:BooleanToVisibilityConverter 🧩 示例 2:InvertedBooleanToVisibilityConverter 🧩 示例 3:StringToColorConverter 🧩 示例 4:StringToBrushConverter 🧩 示例 5:NullToVisibilityConverter 🧩 示例 6:EnumToVisibilityConverter 🧩 示例 7:DoubleToOpacityConverter ✅ 注册与使用方式(XAML) 1. 在资源中注册: 2. 在绑定中使用:)

🧩 示例 1:BooleanToVisibilityConverter

将布尔值转换为 Visibility(如 true => Visible, false => Collapsed

csharp 复制代码
public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is bool booleanValue)
            return booleanValue ? Visibility.Visible : Visibility.Collapsed;

        return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is Visibility visibility)
            return visibility == Visibility.Visible;

        return false;
    }
}

🧩 示例 2:InvertedBooleanToVisibilityConverter

反向布尔转可见性(true => Collapsed, false => Visible

csharp 复制代码
public class InvertedBooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is bool booleanValue)
            return !booleanValue ? Visibility.Visible : Visibility.Collapsed;

        return Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is Visibility visibility)
            return visibility != Visibility.Visible;

        return true;
    }
}

🧩 示例 3:StringToColorConverter

将字符串转换为 Color(支持 Hex、Named 等格式)

csharp 复制代码
public class StringToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is string colorStr)
        {
            try
            {
                return (Color)ColorConverter.ConvertFromString(colorStr);
            }
            catch { }
        }
        return Colors.Transparent;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is Color color)
            return color.ToString();

        return string.Empty;
    }
}

🧩 示例 4:StringToBrushConverter

将字符串转换为 Brush(支持 Hex、Named)

csharp 复制代码
public class StringToBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is string brushStr)
        {
            try
            {
                return new SolidColorBrush((Color)ColorConverter.ConvertFromString(brushStr));
            }
            catch { }
        }
        return Brushes.Transparent;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is SolidColorBrush brush)
            return brush.Color.ToString();

        return string.Empty;
    }
}

🧩 示例 5:NullToVisibilityConverter

将 null 或空对象转换为 Visibility(非空显示,为空隐藏)

csharp 复制代码
public class NullToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == null || value is string str && string.IsNullOrEmpty(str)
            ? Visibility.Collapsed
            : Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

🧩 示例 6:EnumToVisibilityConverter

根据枚举值是否匹配某个参数来决定是否显示

csharp 复制代码
public class EnumToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || parameter == null)
            return Visibility.Collapsed;

        return value.ToString() == parameter.ToString()
            ? Visibility.Visible
            : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is Visibility visible && visible == Visibility.Visible && parameter != null)
            return parameter;

        return Binding.DoNothing;
    }
}

XAML 使用:

xml 复制代码
<TextBlock Text="Only shown when Status is Active"
           Visibility="{Binding Status, Converter={StaticResource EnumToVisibilityConverter}, ConverterParameter=Active}" />

🧩 示例 7:DoubleToOpacityConverter

将数值映射为透明度(0.0 - 1.0)

csharp 复制代码
public class DoubleToOpacityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is double opacity)
            return opacity >= 0 && opacity <= 1 ? opacity : 1.0;

        return 1.0;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is double opacity)
            return opacity;

        return 1.0;
    }
}

✅ 注册与使用方式(XAML)

1. 在资源中注册:

xml 复制代码
<Window.Resources>
    <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
    <converters:StringToBrushConverter x:Key="StringToBrushConverter" />
    <!-- 其他转换器 -->
</Window.Resources>

2. 在绑定中使用:

xml 复制代码
<Button Content="Toggle" 
        Visibility="{Binding IsEnabled, Converter={StaticResource BooleanToVisibilityConverter}}" />

<TextBlock Text="Colored Text"
           Foreground="{Binding TextColor, Converter={StaticResource StringToBrushConverter}}" />
相关推荐
yuhulkjv3358 小时前
Claude表格复制到word不再崩溃,AI导出鸭批量导出+格式无损一键搞定
人工智能·ai·c#·word·ai导出鸭
arbboter13 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具
微小冷13 小时前
海康威视相机C#二次开发环境配置
数码相机·c#·.net·海康威视·相机开发
吴可可12318 小时前
C#重写机制与CAD图元开发要点
c#
A_nanda18 小时前
c#WPF开发常见问题
开发语言·c#·wpf
唐青枫18 小时前
别只会解析参数:C#.NET Spectre.Console.Cli 命令行工具实战详解
c#·.net
AI刀刀19 小时前
腾讯元宝粘贴到 word 格式混乱,AI 导出鸭一键规整排版
人工智能·c#·word·ai导出鸭
微小冷20 小时前
海康威视相机C#二次开发指图像采集
数码相机·c#·二次开发·机器视觉·海康威视·mvs·相机开发
rick9771 天前
WinForms 父子窗体数据传递的进化之路:从参数注入到事件回传的完美闭环
c#
淡海水1 天前
C#与常用数据结构源码剖析-全篇导览
开发语言·数据结构·unity·面试·职场和发展·c#