2010-11-23 10 views
6

Ce que j'essaie de faire est relativement simple. Je suis juste en train de lier l'élément Y d'un TranslateTransform sur une ellipse à 1/2 la hauteur de l'ellipse:XAML Liaison à un convertisseur

<Ellipse Name="EllipseOnlyLFA" Height="200" Fill="Yellow" HorizontalAlignment="Left" VerticalAlignment="Bottom" ClipToBounds="True"> 
     <Ellipse.Width> 
      <Binding ElementName="EllipseOnlyLFA" Path="Height"/> 
     </Ellipse.Width> 
     <Ellipse.RenderTransform> 
      <TranslateTransform> 
       <TranslateTransform.Y> 
        <Binding Converter="MultiplyByFactor" ElementName="EllipseOnlyLFA" Path="Height" ConverterParameter="0.5"/> 
       </TranslateTransform.Y> 
      </TranslateTransform> 
     </Ellipse.RenderTransform> 
    </Ellipse> 

J'ai aussi le convertisseur suivant:

public class MultiplyByFactor : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return ((double)value * (double)parameter); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return true; 
    } 
} 

Je reçois un erreur sur la ligne XAML où j'utilise réellement le convertisseur. L'erreur est

'proprieté 'System.Windows.Data.Binding.Converter' a lancé une exception.' Numéro de ligne '22' et position de ligne '8'.

Quelqu'un peut-il nous éclairer sur la façon de procéder? EDIT: Oui, j'ai ajouté le convertisseur en tant que ressource.

Répondre

11

Il y a 2 chose de mal avec votre code

1) votre convertisseur doit être accessible à l'aide de la déclaration StaticResource

<Binding Converter="{StaticResource myMultiplyByFactor}" 
    ElementName="EllipseOnlyLFA" Path="Height" ConverterParameter="0.5"/ 

2) Votre paramètre de conversion est une chaîne par défaut, vous devez le convertir en un double

public object Convert(object value, Type targetType, 
    object parameter, CultureInfo culture) 
{ 
    var p = double.Parse((string)parameter); 
    return ((double)value * p); 
13

Vous devez ajouter le convertisseur aux ressources

Modifier
Vous devez ajouter l'espace de noms trop

xmlns:c="clr-namespace:WpfApplication1" 

modifier fin

<Window.Resources> 
    <c:MultiplyByFactor x:Key="myMultiplyByFactor"/> 
</Window.Resources> 

Ensuite, vous peut utiliser l'instance en om les ressources

<TranslateTransform.Y> 
    <Binding Converter={StaticResource myMultiplyByFactor}" 
     ElementName="EllipseOnlyLFA" 
     Path="Height" ConverterParameter="0.5"/> 
</TranslateTransform.Y> 
+0

@Albin - il devrait être Converter = {} StaticResource myMultiplyByFactor –

+0

Je ne l'ai comme une ressource. –

+0

Je ne pense pas que le downvote soit nécessaire, puisque l'idée ici est juste. –

0

Le paramètre est probablement passé en tant que chaîne. Définissez un point d'arrêt dans votre convertisseur et examinez les valeurs value et parameter. Vous devrez peut-être utiliser double.Parse au lieu de la distribution.