【问题标题】:Display Phone Number on Windows Phone 7.5 Emulator在 Windows Phone 7.5 模拟器上显示电话号码
【发布时间】:2013-05-25 07:18:58
【问题描述】:

使用代码 sn-ps 重新编辑了我的问题... 我知道这个问题被多次提出并且已经提供了解决方案,但是我无法在 windows phone 模拟器上显示电话号码,但只显示了显示名称。 由于在 windows phone 8 模拟器中没有预先内置的联系人,我使用的是 7.5 模拟器。

我做了以下事情: 1.) 在文本框中输入文本

private void txtPhone_TextChanged(object sender, TextChangedEventArgs e)
    {            
        if (txtPhoneNo.Text != string.Empty) //
        {
            ContactResultsLabel.Text = "results are loading...";
            ContactResultsData.DataContext = null;

            Contacts con = new Contacts();
            con.SearchCompleted += con_SearchCompleted;                
            con.SearchAsync(txtPhoneNo.Text, FilterKind.DisplayName, "Contacts Load");
        }            
    }

2.) 根据输入的文本,我对文本框中的文本进行 searchasync 3.) 在搜索完成时解雇代表。 这里我循环通过“e.Results”获取DisplayName和PhoneNumber,并将“e.Results”分配给列表框datacontext属性。

void con_SearchCompleted(object sender, ContactsSearchEventArgs e)
{
        try
        {                
            foreach (Contact con in e.Results)
            {
                var contactsData = from m in e.Results
                                   select new MyContacts
                                   {
                                       DisplayName = m.DisplayName,
                                       PhoneNumber = m.PhoneNumbers.FirstOrDefault()
                                   };

                ContactResultsData.DataContext = e.Results;
            }
        }
        catch (System.Exception)
        {
            //That's okay, no results
        }

        if (ContactResultsData.Items.Count > 0)
        {
            ContactResultsLabel.Text = "results (tap name for details...)";
        }
        else
        {
            ContactResultsLabel.Text = "no results";
        }

4.) 当我运行模拟器时,我只得到 DisplayName,没有 PhoneNumber。

在 XAML 中,我在此列表框的 DataTemplate 中定义了两个文本块。

<TextBlock Name="ContactResultsLabel" Text="" TextWrapping="Wrap" Visibility="Collapsed" />
                <ListBox Name="ContactResultsData" ItemsSource="{Binding}" Height="347" Margin="24,0,0,0">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">                                                                                                        
                                <TextBlock Name="ContactsResult" Text="{Binding Path=DisplayName,Mode=OneWay}" FontSize="{StaticResource PhoneFontSizeExtraLarge}" Margin="18,8,0,0" />
                                <TextBlock Name="ContactsPhoneResult" Text="{Binding Path=PhoneNumber,Mode=OneWay,Source=PhoneNumbers}" FontSize="{StaticResource PhoneFontSizeExtraLarge}" Margin="18,8,0,0" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

但我仍然没有在 UI 上获得电话号码。

还有一个问题,如果文本框的输入范围是字符串,那么只有 searchasync 获得输入的字符串值的结果。但是,如果我的输入范围是 TelePhoneNumber,例如说“55”。不显示联系结果。 我们可以显示数字输入范围的异步结果吗?

这里有一个链接供参考: Integrating contact list for windows 7 phone into app 但我的代码在这一行抛出错误 - 缺少参考汇编错误: 选择新组(c.Key,c); 它不知道这里的“组”是什么。

提前致谢...

【问题讨论】:

  • 任何人,对此有任何帮助!!..
  • 用一些相关代码说明你的问题,你会更有可能找到帮助。
  • 我刚刚使用了网上找到的通用代码来异步搜索联系人...我只想要一些 sn-ps 或其他可以在搜索基于联系人时在模拟器中显示电话号码和显示名称的东西文本输入。
  • 好吧,那就展示一下你有什么,然后也许有人会尝试并找到问题
  • 你需要显示一些代码兄弟..

标签: windows-phone-7 contacts


【解决方案1】:

不显示电话号码的问题在于其TextBlock的绑定:

这应该在那里工作(请注意,只会显示每个联系人的第一个电话号码):

 <TextBlock Name="ContactsPhoneResult" Text="{Binding Path=PhoneNumbers[0]}" FontSize="{StaticResource PhoneFontSizeExtraLarge}" Margin="18,8,0,0" />

无论如何,我不明白您打算在代码的foreach 块中做什么。它什么都不做,contactsData 从未使用过。下面的代码会做同样的事情而不会搞砸:

void con_SearchCompleted(object sender, ContactsSearchEventArgs e)
{             
    ContactResultsData.ItemsSource = e.Results;

    if (e.Results.Count > 0)
    {
        ContactResultsLabel.Text = "results (tap name for details...)";
    }
    else
    {
        ContactResultsLabel.Text = "no results";
    }
}

关于你的第二个问题,如果你想通过电话号码查找,你必须使用FilterKind.PhoneNumber

con.SearchAsync(txtPhoneNo.Text, FilterKind.PhoneNumber, "Contacts Load");

但这不会返回任何结果,除非数字与议程中的数字完全一致。也就是说,在您的情况下,直到您在 TextBox 中输入完整的数字才会返回任何结果。

【讨论】:

  • 好的...感谢您的回答..关于我的第二个问题是通过您所说的使用 FilterKind.PhoneNumber 的电话号码查找,然后执行 con.SearchAsync。但在基于输入文本的代码中,我按显示名称过滤。那么它仍然可以工作,还是我必须检查文本的范围并在此基础上进行过滤?如果是,是否有任何代码 sn-p 检查文本框的输入范围然后过滤。
  • 如果您将过滤器设置为 DisplayName,您将无法通过电话号码找到。你不会得到任何结果。所以是的,如果您想提供使用数字或姓名进行搜索的选项,您应该检查输入,然后执行搜索。
  • 但是如何检查输入。我是否必须提供任何其他控件,例如单选按钮,并且根据选中的选项提供该过滤器。但是那样我的用户界面看起来就不会那么好了。任何帮助。
  • 可能有不同的方法。例如,您可以使用int.TryParse(txtPhoneNo.Text, out number) 来检查输入是否为数字。
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 2018-06-03
  • 2012-11-02
相关资源
最近更新 更多