2011-03-05 68 views
3

我與.NET 4的System.Windows.Markup.XamlReader玩耍 - 只是作爲一個教育運動 - ,我不斷碰到了同樣的問題:與XamlReader.Load加載XAML拋出一個XamlParseException如果根對象定義x:Class,但是如果不成功則成功解析並加載節點。XamlParseException拋出調用XamlReader.Load

這裏是我想要的代碼:我從一個字符串持有XAML同樣的結果嘗試XamlReader.Parse直接

using System.Windows; 
using System.Xaml; 
using XamlReader = System.Windows.Markup.XamlReader; 

namespace WpfApplication2 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      // Load up UserControl1.xaml from the solution 
      var reader = new XamlXmlReader(@"../../UserControl1.xaml", XamlReader.GetWpfSchemaContext()); 
      var userControl = XamlReader.Load(reader) as UserControl1; 

      // Do something with userControl... 
     } 
    } 
} 

:類聲明中定義:僅如果沒有X的工作。

卸下x:Class聲明似乎不是一個很好的選擇,因爲那時我失去了隱藏代碼,特別是呼叫InitalizeComponent()

異常詳細信息:

'Specified class name 'WpfApplication2.UserControl1' doesn't match actual root instance type 'System.Windows.Controls.UserControl'. Remove the Class directive or provide an instance via XamlObjectWriterSettings.RootObjectInstance.'

..但我不知道如何設置XamlObjectWriterSettings.RootObjectInstance(或者確實如果需要的話)?

任何線索?

回答

6

XamlReader是一個解析器,不是編譯器,所以不支持代碼隱藏。如果您需要將代碼與動態加載的XAML關聯起來,您可以執行一些操作,例如將其包裝到在別處定義的控件中,您可以使用XAML中的實例,或者在讀入XAML後,將代碼(即事件處理程序)到結果對象中的元素。

相關問題