2015-09-16 38 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

相關問題