2

今日、アプリケーション バーのアイコン ボタンに問題がありました。メイン ページの XAML に有効なx:Name値があるにもかかわらず、割り当てられた名前を使用してボタンを参照しようとすると、NullReferenceException が発生しました。IDE のツールチップを名前参照の上に置くと、調査時に NULL 値が表示されます。

SOでこの投稿を見つけて、回避策を提供してくれました:

WP7: 要素を参照するときの NullReference 例外

ただし、私が持っている別のプロジェクトでは、この問題は発生しなかったことを思い出しました。そのプロジェクトでは、名前参照に有効な値がありメイン ページ XAML で設定された割り当てられたx:Name値を介してアプリケーション バー ボタンにアクセスできます。どちらのプロジェクトもプラットフォームとしてWindows O/S 7.1をターゲットにしており、関連する XAML またはメイン ページのロード ロジックに違いが見られず、問題の根本を示しています。

これが 1 つの Windows Phone 7 プロジェクトで発生し、他のプロジェクトでは発生しない理由を知っている人はいますか?

null 参照の問題がないアプリのメイン ページ 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>

問題のあるアプリのメイン ページ XAML

<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>
4

2 に答える 2

2

実際、これは AppBar 要素の既知の問題です。AppBar 自体からインデックス経由でボタンにアクセスする必要があります。

var  button =  this.ApplicationBar.Buttons[0];
于 2013-10-30T17:09:57.573 に答える
1

x:Name を使用すると、そのページのコード ビハインドから appbar アイテムにアクセスできます。特に appbar はシェル オブジェクトであり、直接バインドできないため、 x:Name を使用してそのプロパティにアクセスする必要があります。

コードを見ると、問題を引き起こしているコードには appbar の x:Name がありません。それを参照しようとすると、「PhoneAppBar」を探すときに null 参照例外が発生します。

于 2013-10-30T16:51:00.420 に答える