2010-09-14 6 views
0

Je souhaite définir la propriété align (horizontale/verticale) d'un objet par réflexion, avec une valeur de type string. J'utilise quelque chose commeDéfinition de la propriété d'alignement par réflexion avec une valeur de chaîne

private void SetPropertiesFromString(object nav, string properties) 
{ 
    Regex r = new Regex("`(?<property>[^~]*)~(?<values>[^`]*)"); 
    MatchCollection mc = r.Matches(properties); 
    Type type = nav.GetType(); 
    for (int i = 0; i < mc.Count; i++) 
    { 
     PropertyInfo prop = type.GetProperty(mc[i].Groups["property"].Value); 
     prop.SetValue(nav, Convert.ChangeType(mc[i].Groups["values"].Value, prop.PropertyType), null); 
    } 
} 

(Tout à fait même comme this)

Mon problème est que je propriétés lecture de XML, il n'y a HorizontalAlignment = "Stretch". Que je crée une nouvelle entité de contrôle et je ne sais pas, comment définir une propriété comme HorizontalAlignment, où la valeur est "Stretch" etc. Il provoque l'exception "Cast non valide de 'System.String' à 'System.Windows.HorizontalAlignment'. "

Répondre

0

HorizontalAlignment est un type enum. System.Enum.Parse vous permet de convertir une chaîne à la valeur enum correspondante.

+0

Merci pour votre réponse. Mais dans le cycle pourrait être PropertyInfo prop = type.GetProperty ("Height"); prop.SetValue (nav, "45", prop.PropertyType), null); dans le premier cas, mais dans le second cas, il peut y avoir PropertyInfo prop = type.GetProperty ("HorizontalAlignment"); prop.SetValue (nav, "Stretch", prop.PropertyType), null); Ensuite, je ne peux pas le convertir facilement en valeur enum. D'ailleurs - le même problème est avec la marge. – Kosti

+0

Ensuite, vous devez inspecter le type de la propriété target, et si c'est enum essayer de l'analyser avant de le définir, il n'y a pas d'autre moyen plus facile que je puisse penser. –

+0

Omg ... merci pour votre idée, bon travail :) – Kosti

Questions connexes