Проблема с X:TypeArguments и общим классом списка в XAML
Я создал следующую разметку для свободного файла XAML.
<StackPanel
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib">
<scg:List x:TypeArguments="sys:String">
HelloWorld
</scg:List>
</StackPanel>
но я получаю эту ошибку при запуске свободного XAML в IE:
тег "List" не существует в пространстве имен XML " clr-namespace:System.Коллекции.Generic; assembly=mscorlib'. Линия ' 7 'Позиция 2'.
Как вы знаете, дженерики в XAML являются функцией в XAML 2009 и могут работать по большей части только в свободных файлах XAML. Но приведенный выше код не работает.
любой ключ, почему эта ошибка произошла и как исправить проблему? Спасибо заранее.
2 ответов
Я только что протестировал ваш образец с помощью Internet Explorer 9. В IE9 используется PresentationHost.exe
для отображения содержимого и в моей системе (Windows 7 SP1 x64), и, изучив, какие сборки фактически загружены, я подтвердил, что он использует v3.0 framework, который не поддерживает XAML 2009.
документация описывает, что для XBAPs он выбирает, какую версию фреймворка загружать, и поэтому он явно способен использовать v4.0 framework, который поддерживает XAML 2009 для свободного XAML. Однако в документации, к сожалению, не говорится, какую версию фреймворка он выберет для свободного XAML в отличие от XBAPs.
эмпирически, по крайней мере, с вашим образцом, я могу подтвердить это PresentationHost.exe
выбирает v3.0 рамки. Я не могу найти способ переопределить этот выбор, например, каким-либо образом аннотируя XAML.
проблема решена. Мне нужно было включить следующее отображение пространства имен в разметку, чтобы включить использование дженериков.
xmlns:v4="http://schemas.microsoft.com/netfx/2009/xaml/presentation"
теперь он работает нормально.