2010-11-23 15 views
6

Lo que intento hacer es relativamente simple. Estoy tratando de obligar al elemento Y de un TranslateTransform en una elipse a 1/2 de la altura de la elipse:XAML Encuadernación a un convertidor

<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> 

que también tienen la siguiente divisa:

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; 
    } 
} 

Recibo un error en la línea XAML donde realmente uso el convertidor. El error es

'Establecer la propiedad 'System.Windows.Data.Binding.Converter' inició una excepción.' Número de línea '22' y posición de línea '8'.

¿Alguien puede arrojar algo de luz sobre cómo hacer esto? EDITAR: Sí, tengo el convertidor agregado como recurso.

Respuesta

11

hay 2 cosas mal con su código

1) su convertidor se debe acceder mediante la declaración StaticResource

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

2) El parámetro del convertidor es una cadena por defecto, por lo que necesita convertirlo en un doble

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

es necesario agregar el convertidor a los recursos

Editar
Es necesario agregar el espacio de nombres demasiado

xmlns:c="clr-namespace:WpfApplication1" 

final de edición

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

A continuación, puede usar la instancia fr om los recursos

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

@Albin - debe ser Convertidor = {} StaticResource myMultiplyByFactor –

+0

yo lo tengo como un recurso. –

+0

No creo que el downvote sea necesario, ya que la idea aquí es correcta. –

0

El parámetro probablemente pase como una cadena. Establezca un punto de interrupción en su convertidor y mire los valores de value y parameter. Es posible que necesites usar double.Parse en lugar del cast.

Cuestiones relacionadas