在Windows Phone 8.1上创建下拉列表框?

时间:2015-03-13 07:33:52

标签: c# xaml windows-phone-8.1 windows-applications dropdownbox

我是应用程序开发的新手,所以只是想说我在C#上也没有很多经验。所以请简单。

我需要使用textBox创建一个下拉列表。就像输入一个字母一样,下拉列表会显示列表中最可能的单词。 每次输入一个字母时,列表都应该不断更新。

3 个答案:

答案 0 :(得分:1)

我建议你不要使用带有文本框的下拉列表。这是一种桌面控件。对于移动用户来说,使用这种控制并不是用户友好的。

因为当您键入键盘时会显示隐藏60%的屏幕。然后你必须在键入1个字母后按回来隐藏键盘。然后查看结果并添加1个字母..许多用户互动不会让用户满意。

对于以下情况,Windows手机通常会使用长列表选择器:

例如: https://msdn.microsoft.com/en-us/library/windows/apps/jj244365(v=vs.105).aspx

enter image description here

答案 1 :(得分:0)

  1. 作为第一步,使用文本框和列表框创建页面。
  2. 创建ViewModel类并将其设置为列表框的DataContext属性。
  3. DataBinding TextBox.Text,例如,您的viewmodel的SearchTerm属性。 DataBind ListBox.ItemsSource属性,用于查看视图模型中的联系人列表。
  4. 当这个工作时,让我们从过滤开始。我们将使用CollectionView进行实时过滤。

    1. CollectionView可以根据谓词过滤您的联系人集合。我们将创建新的Collection视图,根据SearchTerm属性定义其过滤器。
    2. DataBindid listbox.ItemsSource to CollectionView instear of original Contacts
    3. 在SearchTerm属性设置器中,我们需要在CollectionView上调用Refresh,因此框架知道他需要重新绑定我们的列表框。
    4. 最终的xaml:

      <DockPanel>
          <TextBox Text="{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}" 
                   DockPanel.Dock="Top"/>
          <ListBox ItemsSource="{Binding FilteredContacts}" />
      </DockPanel>
      

      C#:

      public class ViewModel : INotifyPropertyChanged
      {
          private string _searchTerm;
      
          public ViewModel()
          {
              Contacts = new ObservableCollection<string>
              {
                  "Peter", "Daniel", "Kate", "John", "Anthony", "Laura", "Charles"
              };
              FilteredContacts = new ListCollectionView(Contacts);
              FilteredContacts.Filter = contact => string.IsNullOrWhiteSpace(SearchTerm) || ((string)contact).Contains(SearchTerm);
          }
      
          public string SearchTerm
          {
              get { return _searchTerm; }
              set
              {
                  if (value == _searchTerm) return;
                  _searchTerm = value;
                  OnPropertyChanged("SearchTerm");
                  FilteredContacts.Refresh();
              }
          }
      
          public ObservableCollection<string> Contacts { get; private set; }
          public CollectionView FilteredContacts { get; private set; }
      }
      

答案 2 :(得分:-1)

在Windows Phone 8.1中,使用ComboBox实现了下拉功能。本教程可以为您提供帮助:http://www.c-sharpcorner.com/UploadFile/2d2d83/combobox-in-windows-phone-8-1/

注意:我假设您正在基于WinRT运行时创建Windows Phone 8.1应用程序。较旧的Silverlight运行时不支持下拉列表。 (尽管您可以使用Windows Phone toolkit来实现相同的目标)