2009-08-14 8 views
3

J'essaye de placer la propriété de largeur d'un de mes contrôles à un double qualifié,
as described here on MSDN.
(Faites défiler jusqu'à la section « Valeurs XAML » pour voir l'information de MSDN sur l'utilisation d'un qualifiedDouble)Comment définir la propriété FrameworkElement.Width à la valeur d'un doublon qualifié, dans le code-behind?

Cependant, je veux savoir comment atteindre cet objectif dans le code-behind, plutôt que XAML. Les UserControls que je crée ne sont pas liés à XAML, à des fins d'héritage. Je dois donc effectuer toutes les opérations XAML manuellement, en utilisant tout ce que je peux en C#.

Est-ce que quelqu'un sait comment qualifiéDouble est réalisé dans le code-behind?

+0

Édité ma réponse avec un peu plus d'infos, et cette chose "10px". –

Répondre

5

Quelle coïncidence, je devais le faire plus tôt aujourd'hui. Les doubles qualifiés finissent par passer par une conversion de facteur basée sur l'unité que vous leur donnez, mais dans le cadre de LengthConverter.

LengthConverter lc = new LengthConverter(); 
string qualifiedDouble = "10pt"; 

double converted = lc.ConvertFrom(qualifiedDouble); 

Autre:

double original = 10.0; 
double converted = original * 1.333333333; // px-to-pt conversion 

Cela transformera "10pt" à 13,3333333, par exemple. Vous pouvez également utiliser les facteurs de conversion fournis par l'article, mais je préfère utiliser ce qui précède car les facteurs sont intégrés dans la classe.

Modifié: En réponse aux commentaires sur les chaînes ...

conversion de chaîne est parfaitement logique pour ce qu'il était destiné. Ils utilisent XAML car il est beaucoup plus facile d'exprimer certaines choses en XAML qu'en C# ou VB. En XAML, toutes les valeurs sont des chaînes, donc TypeConverter est automatiquement sélectionné pour convertir la chaîne en type cible. FontSizeConverter par exemple, appelle une méthode statique interne sur LengthConverter. (Vous pouvez également instancier FontSizeConverter à la place.) Il existe également des convertisseurs pour GridLength comme "4 *" et Width comme "Auto". Ou, comme je l'ai dit, vous pouvez créer votre propre classe pour convertir sans chaînes.

This article recommande, pour le code-behind, d'utiliser le facteur directement, donc j'ai fourni un autre exemple ci-dessus.

+0

Cela a du sens. Bien que je suis un peu déçu que c'est une conversion de chaîne d'exécution. Microsoft devient trop dépendant des chaînes, je pense. – Giffyguy

+0

Ah, ça a du sens. Ils veulent que vous effectuiez la conversion vous-même si vous avez des beefs avec des chaînes. Mon problème particulier avec la conversion de chaîne est la performance - et il y aura des dizaines de milliers de conversions qui se passent partout dans mon application, et il ne peut pas être autorisé à retarder. Donc, la solution évidente de Microsoft est de le faire moi-même de la manière qui me sera le plus utile. – Giffyguy

Questions connexes