为什么在启动时调用 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 初始化后才注册该处理程序。但是,如果您使用模板,它会变得复杂,我认为这里不值得这样做。
我还在适应 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 初始化后才注册该处理程序。但是,如果您使用模板,它会变得复杂,我认为这里不值得这样做。