2013-12-16 38 views
0

我使用IntegerUpDown控制的時候,我無法將事件指派我的功能,這樣當值改變,它會調用我的函數。我對c#和wpf都很新,所以非常感謝。我一直試圖讓它在類似的例子here中表現出來。編譯器錯誤從<a href="http://wpftoolkit.codeplex.com/wikipage?title=IntegerUpDown#properties_events" rel="nofollow noreferrer">WPFExtendedToolkit</a></p> <p>但是創造IntegerUpDown ValueChanged事件

private IntegerUpDown m_argumentUpDown; 

public IntArgumentOption(ArgumentOptionDescription argumentDesc) : base(argumentDesc) 
{ 
    m_argumentUpDown = new IntegerUpDown 
    { 
     Watermark = argumentDesc.m_watermark, 
     Increment = (int)argumentDesc.m_interval, 
     Minimum = (int)argumentDesc.m_minimum, 
     Maximum = (int)argumentDesc.m_maximum, 
     FormatString = "G", 
     SelectAllOnGotFocus = true, 
     MinWidth = 50, 
     FontSize = 10, 
     Margin = new System.Windows.Thickness(5, 0, 0, 0), 
    }; 

    // COMPILER ERROR: 
    m_argumentUpDown.ValueChanged += new RoutedPropertyChangedEventHandler<int>(ArgumentChanged); 
} 

void ArgumentChanged(object sender, RoutedPropertyChangedEventArgs<int> e) 
{ 

} 

這樣做的結果,編譯器錯誤:

error CS0029: Cannot implicitly convert type 'System.Windows.RoutedPropertyChangedEventHandler< int >' to 'System.Windows.RoutedPropertyChangedEventHandler< object >'

+0

您是否嘗試明確使用它?像'(System.Windows.RoutedPropertyChangedEventHandler)error_variable' – Valin

+0

如果你的意思是新的System.Windows.RoutedPropertyChangedEventHandler (ArgumentChanged)?那也行不通 – user1609530

+0

你試過使用可空類型嗎?即:RoutedPropertyChangedEventArgs JuStDaN

回答

0

在這裏,在UpDownBase類(Xceed.wpfToolkit.dll)的ValueChanged爲方法簽名是:

public event RoutedPropertyChangedEventHandler<object> ValueChanged; 

因此,在你的代碼,你必須聲明一個事件處理程序,其中通用的類型爲「Object」而不是int。由於類型不匹配,編譯器無法從對象隱式轉換爲Int。 因此更改代碼如下

m_argumentUpDown.ValueChanged += new RoutedPropertyChangedEventHandler<object>(ArgumentChanged); 

    } 

    void ArgumentChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
    { 
      //type caste e.newValue and e.OldValue 
    } 
0

下面的工作,我測試了一下。但我不知道這是否被認爲是解決方法,或者IntegerUpDown控件的創建者意味着以這種方式使用它。

m_argumentUpDown.ValueChanged += new RoutedPropertyChangedEventHandler<object>(ArgumentChanged); 
//or you can change above line to following for brevity. ReSharper always suggesting me to do this 
//m_argumentUpDown.ValueChanged += ArgumentChanged; 

void ArgumentChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{ 
    //you need to cast New and Old value to int since both are of type object now 
    int newVal = (int)e.NewValue; 
    int oldVal = (int)e.OldValue; 
} 
相關問題