Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在silverlight中验证颜色_Silverlight_Validation_Colors - Fatal编程技术网

在silverlight中验证颜色

在silverlight中验证颜色,silverlight,validation,colors,Silverlight,Validation,Colors,我在模板类中构造了一些xaml,我需要一个矩形来将Fill属性设置为来自最终用户填充的文本框的内容。因此,在输出xaml之前,我需要验证该值是否可转换为笔刷对象。否则,如果该值不是有效的颜色(命名或非命名),我将得到以下结果:错误:Sys.invalidoOperationException:控件“sldivparent”的XAML无效。[](第6行,第412列):未能从文本“NotValidColorValue”创建“System.Windows.Media.Brush”。很明显,我不想这样,

我在模板类中构造了一些xaml,我需要一个矩形来将Fill属性设置为来自最终用户填充的文本框的内容。因此,在输出xaml之前,我需要验证该值是否可转换为笔刷对象。否则,如果该值不是有效的颜色(命名或非命名),我将得到以下结果:错误:Sys.invalidoOperationException:控件“sldivparent”的XAML无效。[](第6行,第412列):未能从文本“NotValidColorValue”创建“System.Windows.Media.Brush”。很明显,我不想这样,如果值无效,我只希望它是白色的

那么,在继续之前,如何确保“NotValidColorValue”是有效的颜色值

谢谢

编辑以进一步澄清: 我正在使用颜色选择器,从silverlight调用YUI颜色选择器,准确地说,它工作良好。问题是,用户还可以直接在文本框中键入颜色(红色或#112233),该颜色必须有效,如果无效,则显示白色。我不想要
进入颜色名称的整个手动检查,因此理想情况下,我想尝试使用用户键入的任何内容创建某种类型的对象(可能是一些笔刷衍生工具),如果不成功,我会知道颜色值无效,并相应地采取行动。

不确定您想要什么,但如果要验证
\11223344
值,使用
Regex验证
使用如下模式:

(^#[0-9A-Fa-f]{8}$|^#[0-9A-Fa-f]{6}$|^#[0-9A-Fa-f]{3}$)
现在,如果您希望用户键入颜色名称,请尝试使用类似的方法


最后,我建议首先使用。毕竟,它是关于提供一个
丰富的UI

您可以尝试用用户输入的任何内容创建
笔刷
对象。如果它抛出异常,捕获它并让用户知道。否则,它是有效的
颜色

更新
对这个问题做了更多的思考。您可以只绑定值:)这将验证颜色并进行设置。无效值将使用FallbackValue白色

<Rectangle Fill="{Binding ElementName=textBox,
                          Path=Text,
                          FallbackValue=White}"/>
<TextBox Name="textBox" Text="Green"/>

用户必须能够同时输入命名颜色或#11223344。我使用的是一个颜色选择器,而不是silverlight。那么,您是否尝试了
regex
建议?您还可以使用
Reflection
Colors
类中列出
Color
类型的所有公共静态属性,并将名称存储在列表中。使用上面的正则表达式将其与#模式匹配,并与颜色名称列表匹配。Brush是一个抽象类,无法创建。作为派生类之一的SolidColorBrush没有可以获取字符串并使用它尝试将其转换为颜色的构造函数。引发异常的是什么?你为什么不试试看呢?先生,这就是我所说的当场!这是你应得的分数。@danijels:谢谢:)即使是scrgb文本值,如
“sc#1.0,0.5,0.8,0.0”
也适用于这种方法。删除了我答案中的旧部分
private bool IsValidColor(string colorValue)
{
    if (colorValue == "White" || colorValue == "#FFF" || colorValue == "#FFFF" ||
        colorValue == "#FFFFFF" || colorValue == "#FFFFFFFF")
    {
        return true;
    }
    Brush fallbackBrush = new SolidColorBrush(Colors.White);
    Rectangle validationRectangle = new Rectangle();
    Binding validationBinding = new Binding();
    validationBinding.Source = colorValue;
    validationBinding.FallbackValue = fallbackBrush;
    validationRectangle.SetBinding(Rectangle.FillProperty, validationBinding);
    if (validationRectangle.Fill == fallbackBrush)
    {
        return false;
    }
    return true;
}
private Color GetColorFromValue(string colorValue)
{
    Rectangle validationRectangle = new Rectangle();
    Binding validationBinding = new Binding();
    validationBinding.Source = colorValue;
    validationBinding.FallbackValue = new SolidColorBrush(Colors.White);
    validationRectangle.SetBinding(Rectangle.FillProperty, validationBinding);
    return ((SolidColorBrush)validationRectangle.Fill).Color;
}