2015-11-20 79 views
1

我想簡單地對我的自定義控件做一些數學運算。我需要取一個「寬度」值並將其分配給Converter Paramater。c#轉換器獲取指定的演員表無效

這裏是綁定:

<Border x:Name="circleBorder" 
    Grid.Row="0" 
    CornerRadius="{Binding Path=ActualWidth, ElementName=circleGrid}" 
    Width="{Binding Path=ActualWidth, ElementName=circleGrid}" 
    Height="{Binding Path=ActualWidth, ElementName=circleGrid}" 
    BorderBrush="White" 
    BorderThickness="{Binding Converter={StaticResource CalculateBorder}, Path=Width, ElementName=circleBorder, ConverterParameter=30}"> 

這是轉換器,它應該做一些簡單的數學。

public class CalculateBorder : 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) 
    { 
     throw new NotImplementedException(); 
    } 
} 

我得到的return ((double)value/(double)parameter);此錯誤:

指定的轉換是無效的。

+0

聽起來好像你的'parameter'或'value'實際上可能並不是一個雙。嘗試使用'Convert.ToDouble()'而不是直接轉換,因爲它會正確處理更多的情況。 –

+0

向我們展示CalculateBorder是什麼。這是這裏關鍵的缺失信息。最好的方法來證明這一點:不要在你的'Convert'方法中使用參數,只需將'(double)value'除以2.2。 – code4life

+0

你應該在問之前調試這些東西。當您進行轉換時,「value」和「parameter」中有什麼? – Will

回答

4

問題是,無法取消箱子parameter,因爲在這種情況下,parameterstring

溶液轉換參數與Convert

var yourDouble = Convert.ToDouble(parameter); 

上述代碼的問題是,Convert被定義爲您的IValueConverter的方法Convert加倍。所以你需要指定命名空間更清晰。 Convert類位於System命名空間中。所以你應該將它指定爲這樣:

var yourDouble = System.Convert.ToDouble(parameter); 

作出清楚,你要使用的System.Convert


而且物業BorderThickness有型Thickness編譯器。所以你應該返回一個Thickness對象引用而不是double

2

你必須返回System.Windows.Thickness像下面,

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{   
    return new Thickness(10,10,10,10); 
} 

的了borderThickness接受System.Windows.Thickness

轉換參數value給出了objectThickness類,所以你需要將其轉換爲符合您的邏輯。

MSDN

public System.Windows.Thickness BorderThickness { get; set; } 

System.Windows.Controls.Border

的會員

總結: 獲取或設置一個System.Windows.Controls.Border的相對System.Windows.Thickness。

返回: 描述System.Windows.Controls.Border邊界寬度的System.Windows.Thickness。該屬性沒有默認值。

+0

這會產生相同的錯誤。 –

+0

這是什麼錯誤? –

+0

查看上面的第一篇文章。 –

1

對象參數是一個字符串

return ((double)value/Convert.ToDouble(parameter));