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. SDE 空间表操作

    1. 创建空间表(包含st_geometry属性字段) CREATE TABLE sensitive_areas (area_id integer, name varchar(128), area_s ...

  2. React Native 开发环境安装和配置使用报错: -bash: react-native: command not found

    [React  Native 开发环境安装和配置:-bash: react-native: command not found 报错: 前提是安装homebrew,node.js ,npm ,watc ...

  3. spring mvc controller接收请求值及controller之间跳转及传值

    spring接收请求参数: 1,使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(Ht ...

  4. Spring mvc redirect跳转路径问题

    SpringMVC重定向视图RedirectView小分析 前言 SpringMVC是目前主流的Web MVC框架之一. 本文所讲的部分内容跟SpringMVC的视图机制有关,SpringMVC的视图 ...

  5. [React Router v4] Style a Link that is Active with NavLink

    We often need to be able to apply style to navigation links based on the current route. In React Rou ...

  6. [.NET Core 24]把project.json迁移到.csproj

    链接:https://blog.jetbrains.com/dotnet/2017/04/04/rider-eap-update-csproj-based-net-core-support-migra ...

  7. OpenGL学习一

    作者:朱金灿 来源:http://blog.csdn.net/clever101 回家计划学习OpenGL开发.没有开发机子,用的是别人的笔记本,不想装庞大的VS,于是选择小巧一点的codeblock ...

  8. MSYS是一个小型的GNU环境,包括基本的bash,make等等,与Cygwin大致相当(双击“D:\MinGW\msys\1.0\msys.bat”,启动MinGW终端)

    1 简介   MinGW,是Minimalist GNUfor Windows的缩写.它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和 ...

  9. hadoop 3.x 配置历史服务器

    修改$HADOOP_HOME/etc/hadoop/mapred-site.xml,加入以下配置(修改主机名为你自己的主机或IP,尽量不要使用中文注释) <!--history address- ...

  10. expdp备份速度慢的问题

    --出口分析 --两个时间报表分析,该声明仅出口4,059,292  数据,10之后分钟数据没有继续出口              Snap Id  Snap Time  Sessions  Curs ...