Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ApplicationBarIconButton名称引用会导致NullReferenceException,但不是在所有Windows Phone 7应用中?_C#_Xaml_Windows Phone 7_Nullreferenceexception - Fatal编程技术网

C# ApplicationBarIconButton名称引用会导致NullReferenceException,但不是在所有Windows Phone 7应用中?

C# ApplicationBarIconButton名称引用会导致NullReferenceException,但不是在所有Windows Phone 7应用中?,c#,xaml,windows-phone-7,nullreferenceexception,C#,Xaml,Windows Phone 7,Nullreferenceexception,我今天遇到了应用程序栏图标按钮的问题。尽管在主页XAML中有有效的x:Name值,但尝试使用指定的名称引用按钮会导致NullReferenceException。将提示工具提示悬停在名称引用上会在检查时显示空值 我在上找到了这篇文章,这给了我一个解决办法: 然而,我记得在我的另一个项目中,我没有这个问题。在该项目中,名称引用确实具有有效值,并且我能够通过主页XAML中设置的指定x:name值访问应用程序栏按钮。这两个项目都以Windows O/S 7.1为平台,我看不出相关XAML或主页加载逻

我今天遇到了应用程序栏图标按钮的问题。尽管在主页XAML中有有效的x:Name值,但尝试使用指定的名称引用按钮会导致NullReferenceException。将提示工具提示悬停在名称引用上会在检查时显示空值

我在上找到了这篇文章,这给了我一个解决办法:

然而,我记得在我的另一个项目中,我没有这个问题。在该项目中,名称引用确实具有有效值,并且我能够通过主页XAML中设置的指定x:name值访问应用程序栏按钮。这两个项目都以Windows O/S 7.1为平台,我看不出相关XAML或主页加载逻辑之间有什么不同,这表明了问题的根源

有人知道为什么这会发生在一个WindowsPhone7项目中而不是另一个项目中吗

不存在空引用问题的应用程序的主页XAML

<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" x:Name="PhoneAppBar" Opacity="0.0">
        <shell:ApplicationBarIconButton IconUri="/Icons/appbar.feature.video.rest.png" Text="record"  x:Name="StartRecording" Click="StartRecording_Click" />
        <shell:ApplicationBarIconButton IconUri="/Icons/appbar.stop.rest.png" Text="stop" x:Name="StopPlaybackRecording" Click="StopPlaybackRecording_Click"/>
        <shell:ApplicationBarIconButton IconUri="/Icons/appbar.transport.play.rest.png" Text="play" x:Name="StartPlayback" Click="StartPlayback_Click"  />
        <shell:ApplicationBarIconButton IconUri="/Icons/appbar.transport.pause.rest.png" Text="linked" x:Name="PausePlayback" Click="PausePlayback_Click" IsEnabled="False"/>
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>
<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="False">
        <shell:ApplicationBar.Buttons>
            <shell:ApplicationBarIconButton x:Name="btnRecord" Text="record" IconUri="/images/record.png" Click="Record_Click"/>
            <shell:ApplicationBarIconButton x:Name="btnPlay" Text="play" IconUri="/images/play.png" Click="Play_Click" IsEnabled="False"/>
            <shell:ApplicationBarIconButton x:Name="btnStop" Text="stop" IconUri="/images/stop.png" Click="Stop_Click"/>
        </shell:ApplicationBar.Buttons>
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

存在问题的应用程序的主页XAML

<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" x:Name="PhoneAppBar" Opacity="0.0">
        <shell:ApplicationBarIconButton IconUri="/Icons/appbar.feature.video.rest.png" Text="record"  x:Name="StartRecording" Click="StartRecording_Click" />
        <shell:ApplicationBarIconButton IconUri="/Icons/appbar.stop.rest.png" Text="stop" x:Name="StopPlaybackRecording" Click="StopPlaybackRecording_Click"/>
        <shell:ApplicationBarIconButton IconUri="/Icons/appbar.transport.play.rest.png" Text="play" x:Name="StartPlayback" Click="StartPlayback_Click"  />
        <shell:ApplicationBarIconButton IconUri="/Icons/appbar.transport.pause.rest.png" Text="linked" x:Name="PausePlayback" Click="PausePlayback_Click" IsEnabled="False"/>
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>
<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="False">
        <shell:ApplicationBar.Buttons>
            <shell:ApplicationBarIconButton x:Name="btnRecord" Text="record" IconUri="/images/record.png" Click="Record_Click"/>
            <shell:ApplicationBarIconButton x:Name="btnPlay" Text="play" IconUri="/images/play.png" Click="Play_Click" IsEnabled="False"/>
            <shell:ApplicationBarIconButton x:Name="btnStop" Text="stop" IconUri="/images/stop.png" Click="Stop_Click"/>
        </shell:ApplicationBar.Buttons>
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

x:Name允许您从该页面上隐藏的代码中访问appbar项。尤其是因为appbar是一个shell对象,不能直接绑定到它,所以需要使用x:Name来访问它的属性


查看您的代码,发现问题的代码没有appbar的x:Name。如果您试图引用它,则在查找“PhoneAppBar”时会出现空引用异常。

实际上,AppBar元素存在一个已知问题。您必须通过AppBar本身的索引访问按钮

var  button =  this.ApplicationBar.Buttons[0];

令人惊讶的不是它在你的新项目中不起作用,而是它在你的其他项目中起作用。你确定你没有在代码中加入一些变通方法吗?@KooKiz我不知道。工作位来自MSDN视频录制样本,我仔细检查了一下,看看是否有什么不同。但到目前为止我什么也找不到。你能分享一下那个应用程序的代码吗?我真的很想了解它是如何工作的,我只是尝试给appbar一个名称,但运行时的名称引用解析为NULL,就像按钮一样。在清洁和重建之后仍然会发生。