我的应用允许用户将一些自定义XAML标记放入文本框中。当我的应用程序加载时,我使用XamlReader.Parse加载树。然后,我使用这些自定义资源覆盖MergedDictionaries中的一些资源。
这很好用,当用户输入了无效的Xaml时,我可以捕获XamlParseException。当用户键入不正确的属性值(如边框的颜色)时,就会出现问题。如果他们输入灰色而不是灰色,则没有例外,并且UI无法显示。事实上,它似乎已经冻结。
此问题也可以在VS Designer中复制。只需键入不正确的Color值(忽略Intellisense)。 VS中没有警告。
有没有办法捕获这个不正确的属性值?
答案 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
}