为什么在启动时调用ValueChanged

时间:2015-01-07 16:07:55

标签: c# windows-phone-8

我仍然习惯了Windows手机环境,因此我去了很多谷歌搜索等等。我已经被困在某事上几天了,我给它休息一下,做点别的事情再回过头来。 由于nullpointerexepctions,我的应用程序会因打开而崩溃。弹出此代码的代码位于一个仅在滑块更改时运行的函数

功能是

    private void changeVolume_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        myMediaElement.Volume = (double)changeVolume.Value;
    }

它将myMediaElement作为问题说明为null。如果我断断续续,一切正常。有没有办法阻止这个被打开?

2 个答案:

答案 0 :(得分:2)

最有可能是在构建UI时遇到此事件。如果您在XAML中附加changeVolume_ValueChanged,那么任何随机组件很可能尚未出现。例如,myMediaElement可以为null(即因为它在XAML中进一​​步定义为changeVolume)等。

最简单的是,只需添加空检查:

private void changeVolume_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    if(myMediaElement != null)
        myMediaElement.Volume = (double)changeVolume.Value;
}

(顺便说一句,changeVolume不会为空,因为它是它的处理程序)

更复杂的解决方案是在整个UI初始化后才注册该处理程序。但是,如果你使用模板,它会变得复杂,我不认为它在这里真的值得。

答案 1 :(得分:1)

首先检查null:

private void changeVolume_ValueChanged(object sender, 
    RoutedPropertyChangedEventArgs<double> e)
{
    if (myMediaElement != null) myMediaElement.Volume = (double)changeVolume.Value;
}