Проблема с 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"

теперь он работает нормально.