2015-09-16 30 views
1

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

这一直奏效,当用户输入无效的Xaml时,我可以捕捉到XamlParseException。当用户键入不正确的属性值(如边框的颜色)时会出现问题。如果他们输入灰色而不是灰色,则不会出现任何异常,并且用户界面无法显示。事实上,它看起来像应用程序已冻结。

此问题也可以在VS Designer中复制。只需输入不正确的颜色值(忽略智能感知)。 VS中不会有警告。

有什么办法可以捕获这个不正确的属性值吗?

+0

什么是无效的xaml? XamlReader.Parse会在无效颜色上抛出异常,除非可能是无效的xaml位于DataTemplate或类似的内部。 – Evk

+0

它位于DataTemplate中。 – JapNolt

回答

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    
} 
+0

这样做。谢谢!!! – JapNolt

相关问题