如何验证用户提供的自定义XAML中的属性值?

时间:2015-09-16 20:02:55

标签: wpf xaml xamlreader

我的应用允许用户将一些自定义XAML标记放入文本框中。当我的应用程序加载时,我使用XamlReader.Parse加载树。然后,我使用这些自定义资源覆盖MergedDictionaries中的一些资源。

这很好用,当用户输入了无效的Xaml时,我可以捕获XamlParseException。当用户键入不正确的属性值(如边框的颜色)时,就会出现问题。如果他们输入灰色而不是灰色,则没有例外,并且UI无法显示。事实上,它似乎已经冻结。

此问题也可以在VS Designer中复制。只需键入不正确的Color值(忽略Intellisense)。 VS中没有警告。

有没有办法捕获这个不正确的属性值?

1 个答案:

答案 0 :(得分:1)

如果使用XamlReader加载DataTemplates(并且通常) - 在第一次使用模板之前,不会解析DataTemplate内部的xaml(当然仍然执行xml验证)。所以为了解决这个问题,你可以这样做:

var dt = (DataTemplate)XamlReader.Parse("<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><TextBox Background=\"Gray\" /></DataTemplate>"); // < template with invalid color
try {
    dt.LoadContent(); // this will parse template content
}
catch (XamlParseException ex) {
    // notify user xaml is invalid             
}