Как конструктор VS XAML знает, что автоматически заполнять определенные значения? - PullRequest
3 голосов
/ 17 апреля 2010

<Button Name="MyButton" Content="Test" FontStyle="Italic" />

В приведенном выше определении кнопки XAML для свойства FontStyle установлено значение Курсив. Дизайнер каким-то образом может заполнить список для выбора, когда я нажимаю знак =. Как это достигается?

Прежде чем ответить, учтите, что свойство FontStyle, соответственно, имеет тип FontStyle (который является структурой). Это не перечисление, которое было бы тривиально для VS перечислять во время разработки, так как же выбрать правильный список опций для отображения? Существует также совершенно отдельный класс FontStyles, который содержит три статических поля, Italic, Normal и Oblique, которые, как оказалось, являются тремя элементами, которые VS предоставляет в раскрывающемся списке. За кулисами происходит какое-то отображение между FontStyle struct и FontStyles class, потому что я много раз просматривал как браузер объектов, так и в .NET Reflector и не мог ничего определить ни от того, ни от другого.

Спасибо !!

Мне нужно знать! *

* Не совсем, но было бы неплохо:)

Ответы [ 2 ]

1 голос
/ 24 апреля 2010

Служба языка XAML использует GetStandardValues ​​() преобразователя типов, чтобы определить, что следует отображать в раскрывающемся списке типов. Это то же самое, что делает сетка свойств, например.

К сожалению, предоставляемый фреймворком конвертер типов не всегда реализует GetStandardValues ​​(), поэтому разработчик часто предоставляет внутренние замены для многих таких типов. Сетка свойств и языковая служба XAMl используют эти внутренние замены.

0 голосов
/ 18 апреля 2010

У меня нет ответа, но одна интересная вещь - это внутреннее перечисление FontStyle. Стиль MS.Internal.Text.TextInterface.Font, который определяется как

internal enum FontStyle
{
    Normal,
    Oblique,
    Italic
}

Это может быть то, что выставляется конструктору для использования в intellisense.

...