【发布时间】:2015-03-13 07:33:52
【问题描述】:
我是应用程序开发的新手,所以我只是想说我也没有很多 C# 经验。所以请保持简单。
我需要创建一个带有文本框的下拉列表。就像当一个人输入一个字母时,下拉列表会显示列表中最有可能的单词。 并且列表应该在每次输入字母时不断更新。
【问题讨论】:
标签: c# xaml windows-phone-8.1 windows-applications dropdownbox
我是应用程序开发的新手,所以我只是想说我也没有很多 C# 经验。所以请保持简单。
我需要创建一个带有文本框的下拉列表。就像当一个人输入一个字母时,下拉列表会显示列表中最有可能的单词。 并且列表应该在每次输入字母时不断更新。
【问题讨论】:
标签: c# xaml windows-phone-8.1 windows-applications dropdownbox
我建议您不要使用带有文本框的下拉列表。这是一种桌面控制。对于移动用户来说,使用这种控件并不友好。
因为当您键入时,键盘显示隐藏了 60% 的屏幕。然后您必须在键入 1 个字母后按回隐藏键盘。然后查看结果并再添加 1 个字母。大量用户交互不会让您的用户满意。
Windows phone 通常使用长列表选择器来处理这种情况:
示例: https://msdn.microsoft.com/en-us/library/windows/apps/jj244365(v=vs.105).aspx
【讨论】:
当它起作用时,让我们从过滤开始。我们将使用 CollectionView 进行实时过滤。
最终的 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; }
}
【讨论】:
在 Windows Phone 8.1 中,下拉功能是通过组合框实现的。这里的教程应该可以帮助到你:http://www.c-sharpcorner.com/UploadFile/2d2d83/combobox-in-windows-phone-8-1/
注意:我假设您正在创建基于 WinRT 运行时的 Windows Phone 8.1 应用程序。较旧的 Silverlight 运行时不支持下拉菜单。 (虽然你可以使用Windows Phone toolkit 来实现同样的效果)
【讨论】: