Внешний псевдоним в XAML - PullRequest
       13

Внешний псевдоним в XAML

1 голос
/ 28 сентября 2010

В настоящее время я использую библиотеку, которая реализует Меню и ContextMenus для Silverlight 3 и 4 .Эта библиотека определяет класс MenuItem в пространстве имен System.Windows.Controls .

Нет проблем с SL3, поскольку в других местах библиотеки классов Silverlight нет класса MenuItem;но теперь мне нужно использовать другой элемент управления в сборке Silverlight 4 Toolkit , и теперь этот набор инструментов определяет System.Windows.Controls.MenuItem в этой же сборке!

Поэтому мне нужен способ указать компилятору, что я хочу использовать System.Windows.Controls.MenuItem из моей старой сборки, а не тот, что в сборке инструментария 4.

Решение кажется " внешние псевдонимы"функции.

Я могу настроить файлы, которые пишу сам, с помощью внешних псевдонимов, но как указать генератору кода, который генерирует файлы" .gics "из XAML,какую сборку, точнее, какие псевдонимы использовать?

По умолчанию всегда генерируются System.Windows.Controls.MenuItem переменные в файлах ".gics" и, конечно,без псевдонимов компилятор C # не может знать, какую сборку использовать.

Я использую VS 2010 Professional, но мне не удалось найти параметр, чтобы изменить это поведение.

Спасибозаранее.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2010

Наконец я нашел обходной путь: Я создал библиотечный проект, который упаковывает типы из библиотеки меню.

Например:

namespace Alias
{
    public class MenuItem : System.Windows.Controls.MenuItem
    {
    }
}

Затем я ссылаюсь на этот проект из моего реального проекта и могу использовать тип через их "новое" пространство имен "Псевдоним".

Это своего рода "тяжелый псевдоним", но, похоже, работает.

0 голосов
/ 28 сентября 2010

Боюсь, единственный способ обойти это - скопировать содержимое файла .gics и переместить его в свой файл .cs, настроить его псевдонимами, удалить ключевое слово partial, а затем удалить x:Class из Xaml.

Перевернутый дизайнер все равно будет работать. Недостатком является то, что вам нужно самостоятельно создавать любые новые поля управления и добавлять код FindName к копии InitializeComponent, которую вы сейчас имеете в своих .cs. Лично мне это очень нравится, есть множество причин дать элементу имя, отличное от того, что ему нужно быть полем в классе (привязка и анимация - две из них). Раздражает, что поля создаются автоматически, и драгоценное время загрузки отводится на поиск и присваивание, когда они никогда не используются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...