为什么在启动时调用 ValueChanged

Why is ValueChanged being called on startup

我还在适应 windows phone 的环境,所以我经常在谷歌上搜索等等。我已经坚持了几天了,现在我休息一下,做点别的事情,然后再回来做。 由于 nullpointerexepctions,我的应用程序会在打开时崩溃。弹出的代码在一个函数中,该函数仅在更改滑块时运行

函数是

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

它提出了 myMediaElement 作为问题说它为空。如果我断点过去,一切正常。有没有办法阻止它在打开时被调用?

首先检查是否为空:

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

很可能您在 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 初始化后才注册该处理程序。但是,如果您使用模板,它会变得复杂,我认为这里不值得这样做。