none
SL中将颜色名称转换为颜色值的完美解决方案! RRS feed

  • 问题

  • SL并没有提供直接将颜色名称转换为颜色值的程序,
    但是我们可以通过曲线救国的方法,实现这种转换。
    以前我再论坛里面提过这个问题,现在我自己突发奇想,终于完美解决了这个问题。
    奉献代码如下:

    // 注意要引用 System.Windows.Markup;

            public static Color FromNameColor(String ColorNameStr) {
                var Xaml = "<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" Foreground=\"{C}\" />";
                Xaml = Xaml.Replace("{C}", ColorNameStr); var TxtObj = (TextBlock)null;
                try { TxtObj = (TextBlock)XamlReader.Load(Xaml); } catch { TxtObj = null; }
                return TxtObj == null ? Colors.White : ((SolidColorBrush)TxtObj.Foreground).Color;
            }
    2009年12月9日 7:41

答案

  • 问题引出:
    因为我的信息存储在数据库中,其中有一个字段是显示颜色,我要把这个颜色转换为SL可接受的颜色值。(注:我不能在Xaml文件中定义那个颜色,只能在xaml.cs中定义那个颜色,所以需要一个颜色值。)
    也就是说要实现:String --> Color

    ---------------------------
    硬编码,我也不管了,反正能实现就可以。原来我还通过websevercie利用服务器帮我转颜色
    如果用前台的cs代码来自己编写,毕竟太麻烦了,最少有20种以上的命名颜色,那么最少也得做20个条件分支吧?当然你不用If条件,你也得建一个20个颜色对照表吧!

    由于灵活性的考虑,我们经常要利用这种技巧。虽然效率上有点偏差。
    给出这个例子,也是在抛砖引玉,拓宽解决问题的思路。这个解决方案和反射的思路相似。

    注意:为了程序的灵活性,我们还经常使用Reflection(反射)类,反射的效率不是一样很低么,我们不是照用!当然不做通用程序的和公用模块的,基本不用,也涉及不到。
    2009年12月9日 9:53

全部回复

  • 硬编码严重了!
    2009年12月9日 8:25
  • http://www.bbniu.com/forum/thread-189-1-2.html   不知道您说的问题和这个16进制颜色转ARGB及Color转Int32 16进制色字符串转ARGB问题类似不..
    2009年12月9日 8:28
  • 问题引出:
    因为我的信息存储在数据库中,其中有一个字段是显示颜色,我要把这个颜色转换为SL可接受的颜色值。(注:我不能在Xaml文件中定义那个颜色,只能在xaml.cs中定义那个颜色,所以需要一个颜色值。)
    也就是说要实现:String --> Color

    ---------------------------
    硬编码,我也不管了,反正能实现就可以。原来我还通过websevercie利用服务器帮我转颜色
    如果用前台的cs代码来自己编写,毕竟太麻烦了,最少有20种以上的命名颜色,那么最少也得做20个条件分支吧?当然你不用If条件,你也得建一个20个颜色对照表吧!

    由于灵活性的考虑,我们经常要利用这种技巧。虽然效率上有点偏差。
    给出这个例子,也是在抛砖引玉,拓宽解决问题的思路。这个解决方案和反射的思路相似。

    注意:为了程序的灵活性,我们还经常使用Reflection(反射)类,反射的效率不是一样很低么,我们不是照用!当然不做通用程序的和公用模块的,基本不用,也涉及不到。
    2009年12月9日 9:53