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

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

文章目录

    • @[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

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

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 等格式)

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)

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(非空显示,为空隐藏)

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

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

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 使用:

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

🧩 示例 7:DoubleToOpacityConverter

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

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. 在资源中注册:

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

2. 在绑定中使用:

<Button Content="Toggle" Visibility="{Binding IsEnabled, Converter={StaticResource BooleanToVisibilityConverter}}" /><TextBlock Text="Colored Text"Foreground="{Binding TextColor, Converter={StaticResource StringToBrushConverter}}" />

相关文章:

  • docker 查看镜像所在位置
  • python读写bin文件
  • RocketMQ 的事务消息是如何实现的
  • Transfomer学习
  • idea中,git的cherry-pick怎么用
  • 【git】git commit模板
  • 流程自动化引擎:重塑企业数字神经回路
  • 当科技邂逅浪漫:在Codigger的世界里,遇见“爱”
  • 机器学习第十八讲:混淆矩阵 → 诊断模型在医疗检查中的误诊情况
  • 企业网站架构部署与优化-Nginx网站服务
  • 了解 DDD 吗?DDD 和 MVC 的区别是什么?
  • Android 蓝牙开发 - 蓝牙相关权限(蓝牙基本权限、Android 12 蓝牙新增权限、位置权限)
  • 测试工程师要如何开展单元测试
  • 通义灵码2.5智能体模式联合MCP:打造自动化菜品推荐平台,实现从需求到部署的全流程创新
  • t检验详解:原理、类型与应用指南
  • leetcode刷题日记——从前序与中序遍历序列构造二叉树
  • SOC-ESP32S3部分:2-2-VSCode进行编译烧录
  • Visual Studio Code 改成中文模式(汉化)
  • 【机器学习】logistic回归
  • 【C++算法】70.队列+宽搜_N 叉树的层序遍历
  • 错过航班大闹机场女子发声:非母子关系,将起诉视频发布者
  • 观察|脱欧5年后英欧再办峰会,多项突破性协议意味着什么?
  • 翻越高山,成为高山!浙江广厦成CBA历史第八支夺冠球队
  • 中国海警就菲向非法“坐滩”仁爱礁军舰运补发表谈话
  • 财政部:鼓励政策性银行对符合条件的城市更新项目提供支持
  • 张宇祥已任上海闵行区委常委、副区长