2010-11-23 17 views
6

私がやろうとしていることは比較的簡単です。XAMLコンバータへのバインド

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

私は取得しています:

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

は、私はまた、次のコンバータを持っている:私はちょうど楕円の高さを1/2に楕円上TranslateTransformののY要素をバインドしようとしています実際にコンバータを使用するXAML行のエラーです。エラーは 'プロパティを設定し '

あるSystem.Windows.Data.Binding.Converter' が例外をスローしました'。行番号 '22' と行位置 '8'。

どのようにこれを行うには、誰か光を当てることができますか? 編集:はい、コンバータとしてリソースを追加しました。あなたは、あなたがあまりにも

xmlns:c="clr-namespace:WpfApplication1" 

エンド編集

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

を名前空間を追加する必要が

編集
リソースにコンバータを追加する必要が

答えて

11

あなたのコード

1と間違っ2の事)あなたのコンバータはあなたの変換パラメータは、デフォルトでは文字列であるので、あなたがする必要がある)StaticResource宣言

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

2を使用してアクセスする必要がありますがあります。ダブル

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

インスタンスを使用できますfr omリソース

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

@Albinに変換 - それは私が資源としてそれを持っているんコンバーター= {StaticResource myMultiplyByFactor} –

+0

でなければなりません。 –

+0

私はdownvoteが必要だとは思わない、ここのアイデアが正しいから。 –

0

パラメータはおそらく文字列として渡されます。コンバータにブレークポイントを設定し、valueparameterの値を見てください。キャストの代わりにdouble.Parseを使用する必要があるかもしれません。

関連する問題