0

在我的联系人应用程序(对于 wp7)中,我根本无法纠正这个错误。我还在下面添加了一张图片。当我点击联系人号码时,我无法拨打该号码。我收到以下错误- NullReferenceException。我也使用过PhoneCallTask​​。

在此处输入图像描述

在 xaml-

<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">

        <TextBlock Text="{Binding Path=DisplayName, Mode=OneWay}" Foreground="{StaticResource PhoneAccentBrush}" FontSize="{StaticResource PhoneFontSizeExtraLarge}" />

        <Border BorderThickness="2" HorizontalAlignment="Left" BorderBrush="{StaticResource PhoneAccentBrush}" >
            <Image Name="Picture" Height="175" Width="175" HorizontalAlignment="Left" />
        </Border>
        <TextBlock Height="50" Name="textBlock1" Text="call mobile" FontSize="40" Margin="0,30,0,0"/>
        <ListBox x:Name="ListBox" ItemsSource="{Binding Path=PhoneNumbers}" FontSize="64" Height="100"  Margin="0,0,0,0" SelectionChanged="ListBox_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <!--TextBlock Grid.Column="0" Text="{Binding Path=Kind, Mode=OneWay}" />
                        <TextBlock Grid.Column="1" Text=":  " /-->
                        <TextBlock Grid.Column="2" Text="{Binding Path=PhoneNumber, Mode=OneWay}" />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>

在 xaml.cs-

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        //Set the data context for this page to the selected contact
        this.DataContext = App.con;

        try
        {
            //Try to get a picture of the contact
            BitmapImage img = new BitmapImage();
            img.SetSource(App.con.GetPicture());
            Picture.Source = img;
        }
        catch (Exception)
        {
            //can't get a picture of the contact
        }
    }

    private void ListBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
    {
        SampleData data = (sender as ListBox).SelectedItem as SampleData;
        ListBoxItem selectedItem = this.ListBox.ItemContainerGenerator.ContainerFromItem(data) as ListBoxItem;
        PhoneCallTask PhoneTask = new PhoneCallTask();
        PhoneTask.PhoneNumber = data.PhoneNumbers;
        PhoneTask.Show();
    }

    public class SampleData
    {
        public string PhoneNumbers { get; set; }
    }

有人可以帮我吗?提前感谢您的辛勤工作!

4

1 回答 1

1

我很确定该SelectedItem属性不是 type SampleData,因此强制转换将失败并返回 null:

SampleData data = (sender as ListBox).SelectedItem as SampleData;

因此,这一行抛出了一个空引用异常,因为data是空的:

PhoneTask.PhoneNumber = data.PhoneNumbers;

使用调试器,应该很容易证实这个结论——如果你没有使用调试器解决问题的习惯,我真诚地敦促你开始使用它;-)

于 2012-06-17T15:42:53.750 回答