2010-11-23 19 views
6

Yapmaya çalıştığım nispeten basit.XAML Bir dönüştürücüye bağlama

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

Bir alıyorum:

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

şunlarla dönüştürücü vardır: Sadece elips yüksekliğini 1/2 bir elips üzerinde TranslateTransform Y elemanı bağlamak çalışıyorum aslında dönüştürücüyü kullandığım XAML satırındaki hata. Hata

'Set mülkiyet 'System.Windows.Data.Binding.Converter olan' durum gönderdi.' Hat numarası '22' ve hat konumu '8'.

Bunu nasıl yapacaklarına ışık tutabilir mi? DÜZENLEME: Evet, dönüştürücü bir kaynak olarak ekledim.

cevap

11

Kodunuzdaki

1) dönüştürücü StaticResource beyanı

<Binding Converter="{StaticResource myMultiplyByFactor}" 
    ElementName="EllipseOnlyLFA" Path="Height" ConverterParameter="0.5"/ 
) Kişisel dönüştürücü parametre varsayılan olarak bir dize kullanarak erişmesi gereken 2 şey yanlış vardır, bu yüzden gerek bir çift

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

Sen de

xmlns:c="clr-namespace:WpfApplication1" 

uç düzenlemek

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

Sonra ad eklemeniz gerekir kaynaklara

Edit
dönüştürücü eklemeniz gerekir sen örneği fr kullanabilir om kaynakları

+0

@Albin dönüştürmek - Öyle bir kaynak olarak var Dönüştürücü = {StaticResource myMultiplyByFactor} –

+0

olmalıdır. –

+0

İndirgemenin gerekli olduğunu sanmıyorum çünkü buradaki fikir doğru. –

0

Parametre büyük olasılıkla bir String olarak iletilir. Dönüştürücünüzde bir kesme noktası ayarlayın ve value ve parameter değerlerine bakın. Cast yerine double.Parse kullanmanız gerekebilir.