Предоставление свойств Intellisense в Silverlight - PullRequest
4 голосов
/ 05 августа 2010

Привет ТАК, так что у меня есть пользовательский элемент управления в Silverlight.Неважно, что это такое, но это большая сложная вещь с древовидной структурой, ползунком и другим мусором.

Теперь в элементе управления есть переменная экземпляра, которая называется defaultTemplate.Он имеет тип DataTemplate.По сути, это шаблон, который TreeViewItem использует в качестве шаблона заголовка, если разработчик приложения не вызывает myControl.setTemplate (DataTemplate dt);

Просто сделав свойство общедоступным и предоставив ему методы получения и установки, оно отображается в intellisense, когдаЯ набираю следующее ...

<myNamespace:myControl x:Name="theControl" defa

Intellisense обнаруживает тот факт, что у моего класса есть свойство defaultTemplate, и оно перечисляет его в качестве опции.

Что бы я хотел:

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

<myNamespace:myControl x:Name="theControl" defaultTemplate="_"

Функциональность, которую я ищу, может быть найдена в свойстве TextBlock foreground.Когда вы наберете

foreground="", вы начнете перечислять цвета для выбора.Я был бы согласен с определением констант в качестве имен шаблонов данных и возможностью выбора intellisense из тех или чего-то подобного.

Как я могу добиться этого?Спасибо!


Пояснение Править: Мне нужно, чтобы intellisense знал о списке констант, которые являются допустимыми входными данными для свойства xaml.Так что мое свойство defaultTemplate может быть просто строкой.Я разберусь с тем, что означает эта строка в моем коде.Но мне нужно intellisense, чтобы знать, какие строки можно ввести для этого свойства в XAML.Цвет переднего плана после ввода кавычки выскакивает список в intellisense, который похож на «Azure, Beige ... LemonChiffon ... и т. Д.»Как мне предоставить intellisense с этим списком?Спасибо!


Окончательное редактирование: Благодаря siege898 теперь я могу выбирать свои значения для defaultTemplate из списка, который мне предоставляет intellisense.Однако я также хотел бы иметь возможность предоставить разработчику приложения (который использует мой элемент управления) возможность определить собственный шаблон данных и указать его имя.

Так, например, Боб использует мой элемент управленияв своем заявлении.Ни один из предоставленных мной шаблонов не подходит для него.Поэтому Боб создает в словаре ресурсов шаблон данных для своего приложения, который называется bobTemplate.Я хотел бы, чтобы Боб смог войти в поле defaultTemplate в xaml defaultTemplate="bobTemplate" и не выдавать ошибку.Я полагаю, что проблема, с которой я столкнулся сейчас, заключается в том, что поле ожидает значения в моем перечислении.Кто-нибудь знает, как я могу настроить это, чтобы оба дать мне выпадающий список, сгенерированный из enum, но все же принимать пользовательские строки? Я думал о преобразователе типов, но я не уверен, как использовать его для того, что я хочу ...

Ответы [ 2 ]

4 голосов
/ 09 августа 2010

Я думаю, что вы работаете на перечисленное свойство.Итак, вот что я предлагаю:

public enum Templates
{
    Template1, Template2, ...
}

public Templates defaultTemplates
{
   get;
   set;
}

Однако, поскольку это перечисляемое свойство, когда пользователь передает значение (например, Template1), приложение увидит это как целое число (0 = Template1, 1 =Template2 ...)

Поэтому я также предлагаю сохранить какой-то словарь или иметь функцию поиска, которая сопоставляет каждое целое число с нужным шаблоном.(Или даже преобразователь типа, как упомянуто выше)

Я не уверен на 100%, почему это добавляет intellisense, но, по моему опыту, оно всегда есть, даже в XAML.Я думаю, что VS видит, что для defaultTemplates должно быть задано одно из значений в шаблонах, поэтому он заполняет список.

Надеюсь, это то, что вы ищете.

3 голосов
/ 05 августа 2010

Если вы не выставляете перечисление, которое intellisense выберет из свойств и свойств зависимостей, которые определены как перечисления, вам потребуется предоставить преобразователь типа.Это то, что обеспечивает синтаксический анализатор XAML «инструкциями» для разбора строк на другие типы.

Посмотрите здесь для фона: http://msdn.microsoft.com/en-us/library/cc645047(VS.95).aspx

Затем посмотрите здесь дляучебное пособие: http://umairsaeed.com/2010/02/03/creating-a-custom-xaml-typeconverter/

Например, в случае с передним планом свойство отображается в статический класс Colors, который предоставляет список значений, представленных в XAML.

...