验证silverlight中的颜色

时间:2010-12-27 14:46:52

标签: silverlight validation colors

我在模板类中构造了一些xaml,我需要一个矩形来将Fill属性设置为来自最终用户填充的文本框的内容。因此,我需要在输出xaml之前验证该值是否可转换为Brush对象。否则,如果值不是有效颜色(命名与否),我会得到以下信息:错误:Sys.InvalidOperationException:控件'sldivaparent'的XAML无效。 [](第6行,第412栏):无法从文本'NotValidColorValue'创建'System.Windows.Media.Brush'。显然,我不希望这样,如果价值无效,我只想让它成为白色。

那么在继续之前我怎样才能确保'NotValidColorValue'是有效的颜色值?

由于

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

3 个答案:

答案 0 :(得分:3)

<强>更新
做了一些更多的思考这个问题。你可以绑定值:)这将验证颜色并设置它。无效值将使用FallbackValue White。

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

如果您需要在代码中使用IsColorValid和GetColorFromValue等方法,那么您可以在那里使用Bindings

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;
}

答案 1 :(得分:1)

不确定您想要什么,但如果您想验证#11223344值,请使用以下格式之类的内容使用Regex validation

(^#[0-9A-Fa-f]{8}$|^#[0-9A-Fa-f]{6}$|^#[0-9A-Fa-f]{3}$)

现在,如果您希望用户输入颜色名称,请尝试使用Color ComboBox之类的内容。

最后,我建议首先使用ColorPicker。它毕竟是提供Rich UI

答案 2 :(得分:0)

您可以尝试使用用户输入的内容创建Brush对象。如果它抛出异常,请抓住它并让用户知道。否则,它是有效的Color