2012-12-19 45 views
3

我寫了簡單的XAML文件:異常的XAML解析

<Window  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="400" d:DesignWidth="250" 
      WindowStartupLocation="CenterScreen" 
      ResizeMode="NoResize" Title="Окошко" Width="250" Height="400"> 
    <Grid> 
     <!--Настраиваем сетку--> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <!--Теперь по сетке раскидываем контролы--> 
     <GroupBox x:Name="listTitle" x:FieldModifier="public" Header="Список элементов:" Margin="5" 
        Padding="5"> 
      <!--В объекте ListBox указываем, что источником данных для элементов 
      списка следует использовать свойство DataContext родительского элемента--> 
      <ListBox x:Name="listbox" x:FieldModifier="public" 
        ItemsSource="{Binding}" SelectionMode="Multiple"> 
       <!--Шаблон отображения элементов списка--> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <!--Указываем, что каждый элемент следует отображать 
         в виде текста, который должен считываться из свойства "Value"--> 
         <TextBlock Text="{Binding Path=Value}"/> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
     </GroupBox> 
     <GroupBox Header="Примечание:" Grid.Row="1" Margin="5" Padding="5"> 
      <TextBlock x:Name="txtNotes" x:FieldModifier="public" TextWrapping="Wrap"/> 
     </GroupBox> 
     <StackPanel Orientation="Horizontal" Grid.Row="2" 
        HorizontalAlignment="Right"> 
      <Button x:Name="btnAccept" x:FieldModifier="public" Margin="5" 
        Padding="5" IsDefault="True">Принять</Button> 
      <Button x:Name="btnExit" x:FieldModifier="public" Margin="5" 
        Padding="5" IsCancel="True">Выход</Button> 
     </StackPanel> 
    </Grid> 
</Window> 

這是簡單的窗口:

enter image description here

我在我的代碼解析此:

using (io.FileStream fs = new io.FileStream(fileFullName, io.FileMode.Open)) { 
    depObj = XamlReader.Load(fs) as DependencyObject; 
    fs.Close(); 
} 

它的工作原理在.NET 4.0中很好,但在.NET 3.5 SP1中,我得到異常:

System.Windows.Markup.XamlParseException發生
消息=屬性 'FieldModifier' 在XML命名空間 'http://schemas.microsoft.com/winfx/2006/xaml' 不存在。 17號線位置 '38'。

爲什麼會出現這種情況?

回答

4

那麼,它不應該工作在.NET 4任,但顯然解析器忽略您使用x:FieldModifier的錯誤是「好」給你。

按照MSDN documentation,則還必須有一個x:Class指令。

如果XAML生產所使用的X:任何地方FieldModifier,根元素XAML生產 必須聲明的x:類指令。

如果您沒有聲明類/代碼隱藏文件並正在動態加載XAML,那麼使用x:FieldModifier是沒有意義的。

+0

謝謝@Adam窗臺 –

+0

這也似乎是,如果你用'X發生:FieldModifier'一個DataTemplate內,大概類似的原因。 – dlf