备份一个个人用的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 ...
随机推荐
- C++开发人脸性别识别教程(5)——通过FaceRecognizer类实现性别识别
在之前的博客中已经攻克了人脸检測的问题,我们计划在这篇博客中介绍人脸识别.性别识别方面的相关实现方法. 事实上性别识别和人脸识别本质上是相似的,由于这里仅仅是一个简单的MFC开发,主要工作并不在算法研 ...
- ZBar 是款桌面电脑用条形码/二维码扫描工具
ZBar 是款桌面电脑用条形码/二维码扫描工具 windows平台python 2.7环境编译安装zbar 最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本 ...
- 数据挖掘之分类算法---knn算法(有matlab样例)
knn算法(k-Nearest Neighbor algorithm).是一种经典的分类算法. 注意,不是聚类算法.所以这样的分类算法必定包含了训练过程. 然而和一般性的分类算法不同,knn算法是一种 ...
- [读书笔记]《Android开发艺术探索》第十五章笔记
Android性能优化 Android不可能无限制的使用内存和CPU资源,过多的使用内存会导致内存溢出,即OOM. 而过多的使用CPU资源,通常是指做大量的耗时任务,会导致手机变的卡顿甚至出现程序无法 ...
- Newtonsoft.Json 序列化反序列化
public class People { public string name { get; set; } public string age { get; set; } public string ...
- 【codeforces 768A】Oath of the Night's Watch
[题目链接]:http://codeforces.com/contest/768/problem/A [题意] 让你统计这样的数字x的个数; x要满足有严格比它小和严格比它大的数字; [题解] 排个序 ...
- iOS 使用贝塞尔曲线绘制路径
使用贝塞尔曲线绘制路径 大多数时候,我们在开发中使用的控件的边框是矩形,或者做一点圆角,是使得矩形的角看起来更加的圆滑. 但是如果我们想要一个不规则的图形怎么办?有人说,叫UI妹子做,不仅省事,还可以 ...
- Ultra-wideband (UWB) secure wireless device pairing and associated systems
Methods and systems are disclosed for ultra-wideband (UWB) secure wireless device pairing. Secure pa ...
- 【Leetcode】Linked List Cycle II
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...
- 获得WIN7管理员权限(可通过修改注册表,或者组策略改变)
在使用WIN7过程中,常常会再出现没有管理员权限而不能正常运行软件(有的软件直接就是打不开,有的软件不能正常运行(比如如果没有管理员权限,keil就不能注册成功))....也许你会说,我的电脑里只有一 ...