ce que j'essaie de faire est relativement simple. J'essaie simplement de lier l'élément Y d'un TranslateTransform sur une ellipse à la moitié de sa hauteur:
<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 une erreur sur la ligne XAML où j'utilise réellement le convertisseur. L'erreur est
'La propriété Set ' System.Windows.Data.Binding.Converter ' A levé une exception.' Numéro de ligne '22' Et position de la ligne '8'.
Quelqu'un peut-il nous éclairer sur la manière de procéder? EDIT: Oui, j'ai le convertisseur ajouté en tant que ressource.
Il y a 2 problèmes 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 convertisseur est une chaîne par défaut, vous devez donc le convertir en double
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
double.TryParse((parameter as string).Replace(',', '.'), NumberStyles.Any, CultureInfo.InvariantCulture, out double param);
return param * (double)value;
}
Vous devez ajouter le convertisseur aux ressources
Modifier
Vous devez également ajouter l'espace de noms
xmlns:c="clr-namespace:WpfApplication1"
fin éditer
<Window.Resources>
<c:MultiplyByFactor x:Key="myMultiplyByFactor"/>
</Window.Resources>
Ensuite, vous pouvez utiliser l'instance à partir des ressources
<TranslateTransform.Y>
<Binding Converter={StaticResource myMultiplyByFactor}"
ElementName="EllipseOnlyLFA"
Path="Height" ConverterParameter="0.5"/>
</TranslateTransform.Y>
Le paramètre est probablement passé sous forme de chaîne. Définissez un point d'arrêt dans votre convertisseur et examinez les valeurs de value
et parameter
. Vous devrez peut-être utiliser double.Parse au lieu de la distribution.