2010-04-17 1 views
3

<Button Name="MyButton" Content="Test" FontStyle="Italic" />Comment le concepteur VS XAML sait-il comment remplir automatiquement certaines valeurs?

Dans la définition XAML ci-dessus d'un bouton, la propriété FontStyle est définie en italique. Le concepteur est en quelque sorte en mesure de remplir une liste pour que je puisse choisir quand je tape le signe =. Comment cela est-il réalisé?

Avant de répondre, considérez que la propriété FontStyle est, de manière appropriée, de type FontStyle (qui est une structure). Ce n'est pas une énumération, ce qui serait trivial pour VS d'énumérer au moment du design, alors comment la liste valide des options choisies pour être affichée? Il existe également une classe FontStyles complètement distincte qui contient trois champs statiques, Italic, Normal, et Oblique qui se trouvent être les trois éléments que VS fournit dans la liste déroulante. Y a-t-il un mappage en coulisse entre la structure FontStyle et la classe FontStyles, parce que j'ai regardé dans de nombreux endroits à la fois le navigateur d'objets et dans .NET Reflector et que je n'ai pu déterminer quoi que ce soit.

Merci!

Je dois savoir! *

* Pas vraiment, mais ce serait bien de :)

+0

Wow, c'est bizarre. Normalement, je dirais qu'il s'agit de 'TypeConverter.GetStandardValues', mais' FontStyleConverter' ne remplace pas 'GetStandardValues' ou' GetStandardValuesSupported'. Bizarre. – itowlson

Répondre

1

Le service de langage XAML utilise le GetStandardValues ​​() du convertisseur de type pour déterminer les éléments à afficher dans la liste déroulante pour un type. C'est la même chose que la grille de propriétés, par exemple.

Malheureusement, le convertisseur de type fourni par le framework n'implémente pas toujours GetStandardValues ​​() de sorte que le concepteur fournira souvent des remplacements internes pour de nombreux types de ce type. La grille de propriétés et le service de langage XAMl utilisent ces remplacements internes.

+0

Intéressant, cela a du sens. Merci d'avoir répondu! – Pwninstein

0

Je n'ai pas la réponse, mais une chose intéressante est qu'il ya un ENUM FontStyle interne. le style MS.Internal.Text.TextInterface.Font qui est défini comme

internal enum FontStyle 
{ 
    Normal, 
    Oblique, 
    Italic 
} 

Cela pourrait être ce qui est exposé au concepteur à utiliser pour IntelliSense.

Questions connexes