备份一个个人用的WPF万能转换器
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万能转换器的更多相关文章
- [.NET] 打造一个很简单的文档转换器 - 使用组件 Spire.Office
打造一个很简单的文档转换器 - 使用组件 Spire.Office [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6024827.html 序 之前,& ...
- 在VS中手工创建一个最简单的WPF程序
如果不用VS的WPF项目模板,如何手工创建一个WPF程序呢?我们来模仿WPF模板,创建一个最简单的WPF程序. 第一步:文件——新建——项目——空项目,创建一个空项目. 第二步:添加引用,Presen ...
- shell实现自动备份整个数据库,一个库备份一个文件
自动实现备份整个数据库 实现一个库备份一个文件 实现排除不需要备份的库 实现备份成压缩文件 实现定义保留多少天的备份文件 核心代码 #!/bin/bash #set -x ############## ...
- 使用 WebView2 封装一个生成 PDF 的 WPF 控件
使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...
- WPF:类型转换器的实现
类型转换器提供字符串文本到值的转换方法来帮助WPF设计时在XAML中配置属性.具体用法可以参考MSDN的文档:如何:实现类型转换器. 下面是一个Demo,参考自<葵花宝典--WPF自学手册> ...
- wpf值转换器IValueConverter例子
转载:http://blog.163.com/wangzhenguo2005@126/blog/static/37140526201085113430862/ 值转换器可以把一种类型转换成另一种类型. ...
- C#备份一个文件到指定的文件夹里面
一开始我的想法是这样的: //在控制台里面操作 static void Main(string[] args) { //backup( @"D:\gg\config.xml", @ ...
- java 万能转换器 输入SQL 直接得到ArrayList
//java万能List转换器 public static <T> ArrayList<T> ToList(Class<T> clazz,String sql) t ...
- 如何组织一个同时面向 UWP/WPF/.Net Core 控制台的 C# 项目解决方案
希望写一个小型工具,给自己和需要的人.考虑到代码尽可能的复用,我准备采用 .Net Standard 来编写大多数核心代码,并基于 .Net Core 编写跨平台控制台入口,用 WPF 编写桌面端 U ...
随机推荐
- Angularjs Nodejs Grunt 一个样例
做了一个简单的演示样例,目的是记录环境配置以及这套框架的结构流程. 1.配置环境 默认nodejs已安装. 安装下面模块:express(nodejs框架),grunt(javascript task ...
- Android中密码输入内容可见性切换
今天在做项目的时候遇到了一个关于密码输入框可见性切换问题,上网搜了搜,这里面门道还不小,做一个记录吧,下次遇到就好解决了. 首先写了一个简单的测试工程: <LinearLayout xmlns: ...
- PHP移动互联网开发笔记(8)——MySQL数据库基础回顾[2]
一.数据表 为了确保数据的完整性和一致性,在创建表时指定字段名称,字段类型和字段属性外,还需要使用约束(constraint),索引(index),主键(primary key)和外键(foregin ...
- 【37.07%】【UESTC 360】Another LCIS
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status F ...
- ArcEngine中最短路径的实现
原文 ArcEngine中最短路径的实现 最短路径分析属于ArcGIS的网络分析范畴.而ArcGIS的网络分析分为两类,分别是基于几何网络和网络数据集的网络分析.它们都可以实现最短路径功能.下面先介绍 ...
- Tokumx vs Mongodb
Mongodb是一个文档型nosql数据库 採用C++编写 Mongo DB最大的优势在于全部的数据持久操作都无需开发者手动编写SQL语句,直接调用方法就能够轻松的实现CRUD操作. 非常多人觉得mo ...
- Java序列化机制中的类版本号问题
原文地址:http://yanwushu.sinaapp.com/java_serialversionuid/ 内容简单介绍 某些实现了serializable接口的java类中会看到名称为seria ...
- Android 多个Fragment嵌套导致的三大BUG
Android有碎片化的问题,当然本文说的碎片化不是指的系统版本碎片化的问题,而是Fragment组件碎片化的问题. 很久之前,在Android 3.1系统发布的时候,Google推出了使用Fragm ...
- CreateFileMapping和MapViewOfFile函数
大家都是到PG是分布式网络事务处理数据库,与其他数据库优点之一就在于服务器与客户的交流是一对一的,所谓一对一是指,针对客户的每一连接服务器都会产生一个进程为其服务,那么问题就来了,这些进程间是如何交互 ...
- Xamarin.Forms开发APP
Xamarin.Forms+Prism(1)—— 开发准备 准备: 1.VS2017(推荐)或VS2015: 2.JDK 1.8以上: 3.Xamarin.Forms 最新版: 4.Prism 扩展, ...