在代码隐藏中创建ValueChanged事件处理程序

时间:2018-03-30 20:43:02

标签: c# wpf events

我正在使用WPFToolkit中的DoubleUpDown控件,我正在尝试使用ValueChanged创建一个事件处理程序。

DoubleUpDown dud = new DoubleUpDown();
dud.ValueChanged += new RoutedPropertyChangedEventHandler<double>(DoubleUpDown_ValueChanged);

private void DoubleUpDown_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{

}

我收到错误消息

  

CS0029无法隐式转换类型   'System.Windows.RoutedPropertyChangedEventHandler double'来   'System.Windows.RoutedPropertyChangedEventHandler对象'

有关如何解决此问题以确保没有类型冲突的任何建议?感谢。

4 个答案:

答案 0 :(得分:1)

我刚刚通过online source code进行了深入研究,看起来该事件的宣言是......

public event RoutedPropertyChangedEventHandler<object> ValueChanged

所以你的签名需要通过制作它来匹配......

private void DoubleUpDown_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e)

答案 1 :(得分:1)

正如错误所示,ValueChanged期待RoutedPropertyChangedEventHandler<object>,所以你必须这样做:

DoubleUpDown dud = new DoubleUpDown();
dud.ValueChanged += new RoutedPropertyChangedEventHandler<object>(DoubleUpDown_ValueChanged);

private void DoubleUpDown_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{

}

在处理程序中,您必须将object转换为double

注意:

作者在源代码中留下了关于here

的评论
  

由于Visual Studio中的错误,您无法为其创建事件处理程序   XAML中的泛型T args,所以我必须使用object。

答案 2 :(得分:0)

这是你想要的吗?

dud.ValueChanged += DoubleUpDown_ValueChanged;
private void DoubleUpDown_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
     if(e != null && Math.Abs((double)e.NewValue) < 0.000000001d)
     {
        // for example
     }

}

答案 3 :(得分:0)

我希望这会对您有所帮助

 this.dud.ValueChanged += new System.Windows.RoutedPropertyChangedEventHandler<double>(this.dud_ValueChanged);


private void dud_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)