public class CommonCoverter : IValueConverter
{
/// 转换器参数语法: key1,value1 key2,value2 ... [other,defultValue] [object>bool]
/// -----------1---------------- -------2----------- ------3------
/// 1:必填,为键值对,用空格分隔,不限键值对个数
/// 2:选填,如果你想要1转成true,其他转成false: 1,true other,false ;也可以1和2转成true,其他转成flase: 1,true 2,true other,false
/// 3:选填,像DataTrigger的value是object类型的, 如果用了此转换器需要手动指定转换类型. 例如 object>visibility 1,visible 2,hidden
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
#region 参数转dictionary
string ObjectType = null;
Dictionary<string, string> PStrDic = new Dictionary<string, string>();
object result = null;
var PStr = parameter as string ?? "";
if (!((value is DateTime) && targetType == typeof(string)))
{
if (targetType == typeof(object) && Regex.IsMatch(PStr, @"object\>(\w+)"))
ObjectType = Regex.Match(PStr, @"object\>(\w+)").Groups[].Value;
foreach (Match m in Regex.Matches(PStr, @"\w+\,[^\s]+"))
{
var p_key = Regex.Match(m.Value, @"^\w+").Value;
var p_value = Regex.Match(m.Value, @"(?<=\,)[^\s]+$").Value;
PStrDic.Add(p_key, p_value);
}
}
#endregion // to visibility
if (targetType == typeof(Visibility) || targetType == typeof(Visibility?) || ObjectType == "visibility")
{
if (PStrDic.ContainsKey(value.ToString().ToLower()))
{
var temp = PStrDic[value.ToString().ToLower()].ToLower();
Visibility visibilityResult = Visibility.Collapsed;
switch (temp)
{
case "visible":
visibilityResult = Visibility.Visible; break;
case "hidden":
visibilityResult = Visibility.Hidden; break;
case "collapsed":
visibilityResult = Visibility.Collapsed; break;
default:
break;
} return visibilityResult;
}
else
{
result = PStrDic.Any(t => t.Key.ToLower() == "other") ? PStrDic.Single(t => t.Key.ToLower() == "other").Value : (object)Visibility.Collapsed; }
}
// to int
if (targetType == typeof(int) || targetType == typeof(int?) || ObjectType == "int")
{
if (PStrDic.ContainsKey(value.ToString().ToLower()))
{
var temp = PStrDic[value.ToString().ToLower()].ToLower();
result = int.Parse(temp);
}
else
{
result = PStrDic.Any(t => t.Key.ToLower() == "other") ? PStrDic.Single(t => t.Key.ToLower() == "other").Value : (object);
}
}
// to bool
if (targetType == typeof(bool?) || targetType == typeof(bool) || ObjectType == "bool")
{
if (PStrDic.ContainsKey(value.ToString().ToLower()))
{
var temp = PStrDic[value.ToString().ToLower()].ToLower();
result = bool.Parse(temp);
}
else
{
result = PStrDic.Any(t => t.Key.ToLower() == "other") ? PStrDic.Single(t => t.Key.ToLower() == "other").Value : (object)false;
}
}
// to string
if (targetType == typeof(string) || ObjectType == "string" || value?.GetType()?.IsEnum == true)
{
if (PStrDic.ContainsKey(value.ToString()) )
{
var temp = PStrDic[value.ToString()];
result = temp;
}
else
{
result = PStrDic.Any(t => t.Key.ToLower() == "other") ? PStrDic.Single(t => t.Key.ToLower() == "other").Value : (object)"";
}
}
//datetime
if (targetType == typeof(string) && (value is DateTime))
{
var dt = (DateTime)value;
if (dt == DateTime.MinValue)
{
result = "";
}
else
{
result = PStrDic.Any(t => t.Key.ToLower() == "other") ? PStrDic.Single(t => t.Key.ToLower() == "other").Value : (object)dt;
}
} return result ?? Binding.DoNothing; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}

使用示例1

<DataTrigger Binding="{Binding MainIndex,ConverterParameter='object>bool 2,true other,false',Converter={StaticResource comct}}" Value="true">
<Setter Property="Background" Value="#33FFA500"/>
<Setter Property="CornerRadius" Value="3"/>
</DataTrigger>

使用示例2

<a Visibility="{Binding  MainIndex, ConverterParameter='1,visible',Converter={StaticResource comct}}"/>
<a Visibility="{Binding MainIndex, ConverterParameter='2,visible',Converter={StaticResource comct}}"/>
<a Visibility="{Binding MainIndex, ConverterParameter='3,visible',Converter={StaticResource comct}}"/>
<a Visibility="{Binding MainIndex, ConverterParameter='4,visible',Converter={StaticResource comct}}"/>

备份一个个人用的WPF万能转换器的更多相关文章

  1. [.NET] 打造一个很简单的文档转换器 - 使用组件 Spire.Office

    打造一个很简单的文档转换器 - 使用组件 Spire.Office [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6024827.html 序 之前,& ...

  2. 在VS中手工创建一个最简单的WPF程序

    如果不用VS的WPF项目模板,如何手工创建一个WPF程序呢?我们来模仿WPF模板,创建一个最简单的WPF程序. 第一步:文件——新建——项目——空项目,创建一个空项目. 第二步:添加引用,Presen ...

  3. shell实现自动备份整个数据库,一个库备份一个文件

    自动实现备份整个数据库 实现一个库备份一个文件 实现排除不需要备份的库 实现备份成压缩文件 实现定义保留多少天的备份文件 核心代码 #!/bin/bash #set -x ############## ...

  4. 使用 WebView2 封装一个生成 PDF 的 WPF 控件

    使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...

  5. WPF:类型转换器的实现

    类型转换器提供字符串文本到值的转换方法来帮助WPF设计时在XAML中配置属性.具体用法可以参考MSDN的文档:如何:实现类型转换器. 下面是一个Demo,参考自<葵花宝典--WPF自学手册> ...

  6. wpf值转换器IValueConverter例子

    转载:http://blog.163.com/wangzhenguo2005@126/blog/static/37140526201085113430862/ 值转换器可以把一种类型转换成另一种类型. ...

  7. C#备份一个文件到指定的文件夹里面

    一开始我的想法是这样的: //在控制台里面操作 static void Main(string[] args) { //backup( @"D:\gg\config.xml", @ ...

  8. java 万能转换器 输入SQL 直接得到ArrayList

    //java万能List转换器 public static <T> ArrayList<T> ToList(Class<T> clazz,String sql) t ...

  9. 如何组织一个同时面向 UWP/WPF/.Net Core 控制台的 C# 项目解决方案

    希望写一个小型工具,给自己和需要的人.考虑到代码尽可能的复用,我准备采用 .Net Standard 来编写大多数核心代码,并基于 .Net Core 编写跨平台控制台入口,用 WPF 编写桌面端 U ...

随机推荐

  1. 文本处理之可视化wordcloud

    什么是词云 词云又叫文字云,是对文本数据中出现频率较高的“关键词”在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意思. 准备工作: python开发 ...

  2. [React] Test friendly approach

    Add functional function such as change state, this should have tests covered. For example, in a comp ...

  3. 如何安全退出多个Activity

    我们在项目开发的时候可能会遇到安全退出应用的场景,如何能够安全退出多个Activity?网上有很多方法,如下: 1.抛异常退出 该方法通过抛异常,使程序Force Close.验证可以,但是,需要解决 ...

  4. js 进阶 10 js选择器大全

    js 进阶 10 js选择器大全 一.总结 一句话总结:和css选择器很像 二.JQuery选择器 原生javaScript中,只能使用getELementById().getElementByNam ...

  5. Xcode编译Undefined symbols for architecture xxx 错误总结

    可能会遇到这几种错误:Undefined symbols for architecture armv7Undefined symbols for architecture armv7sUndefine ...

  6. ARM汇编初探---汇编代码中都有哪几类指令---ARM伪指令介绍

    要学习一个东西首先要把概念搞清楚,以下仅仅是自己的一些关于汇编的理解. 可运行文件里的01码是机器码,机器码不等于汇编码,尽管机器码能够非常easy翻译成汇编码. 汇编码中包括非常多汇编指令.伪指令和 ...

  7. Tomcat系列之服务器的安装与配置以及各组件详解

    Tomcat系列之服务器的安装与配置以及各组件详解 大纲 一.前言 二.安装与配置Tomcat 三.Tomcat 目录的结构 四.Tomcat 配置文件 注,本文的测试的操作系统为CentOS 6.4 ...

  8. Web自动化工具对比

    首先说一下我对Web自动化测试与CS自动化测试的认识.从宏观对比都是通过脚本自动化完成功能的验证,区别不大.Web测试更为显著的浏览器兼容性.安全,以及与Web技术相关的表单测试.链接测试等,其实都是 ...

  9. 《node.js开发指南》第五章与新版Node变化太大的一些问题

    1.在win下,命令行工具express -h无效,因为4.x版本的express需要安装express-generator才可以使用express命令,npm install -g express- ...

  10. 【35.39%】【hdu 3333】Turing Tree

    Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...