1

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

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

这个问题也可以在 VS Designer 中复制。只需输入不正确的颜色值(忽略 Intellisense)。VS中不会有警告。

有什么方法可以捕捉到这个不正确的属性值?

4

1 回答 1

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             
}
于 2015-09-17T22:12:14.197 回答