此实例的源码下载,希望能对你有所帮助!
在微软的Silverlight 开源控件项目“Silverlight Toolkit”中,提供了一个自动完成输入框控件:AutoCompleteBox。
该控件的功能就是完成类似于google,或baidu中的搜索输入框的提示(选项)等功能,如下图所示:

下面是AutoCompleteBox的运行效果图:

好的,下面就简要介绍一下这个控件的使用方法:
首先,我们要新创建一个Silverlight的Application项目,然后要准备一个数据源,也就是当我们输入内容时,弹出的下拉列
表框(这里就暂且这么说吧)中显示的相似的提示信息,这里为了方便起见,我直接用其源码示例中的硬编码类来表示数据源,当
然后面还会介绍如何使用WCF来加载数据源信息,这里先创建一个Employee(雇员信息)类,如下:

点击展开示例
public sealed partial class Employee 
...{
public string FirstName ...{ get; set; }
public string LastName ...{ get; set; }
public string DisplayName 
...{
get 
...{
return FirstName + " " + LastName;
}
}
public Employee() 
...{
}
internal Employee(string firstName, string lastName) 
...{
FirstName = firstName;
LastName = lastName;
}
public override string ToString() 
...{
return DisplayName;
}

Sample dataSample data#region Sample data
public static IEnumerable<Employee> AllExecutives 
...{
get 
...{
yield return new Employee("Walid", "Abu-Hadba");
yield return new Employee("J", "Allard");
yield return new Employee("Klaus", "Holse Andersen");
yield return new Employee("Nancy", "Anderson");
yield return new Employee("Brian", "Arbogast");
yield return new Employee("Orlando", "Ayala");
yield return new Employee("Robert J.", "Bach");
yield return new Employee("Martha", "Béjar");
yield return new Employee("Joe", "Belfiore");
yield return new Employee("Sue", "Bevington");
yield return new Employee("Frank H.", "Brod");
yield return new Employee("Brad", "Brooks");
yield return new Employee("Lisa", "Brummel");
yield return new Employee("Tom", "Burt");
yield return new Employee("Chris", "Capossela");
yield return new Employee("Scott", "Charney");
yield return new Employee("Debra", "Chrapaty");
yield return new Employee("Jean-Philippe", "Courtois");
yield return new Employee("Alain", "Crozier");
yield return new Employee("Kurt", "DelBene");
yield return new Employee("Michael", "Delman");
yield return new Employee("Joe", "DeVaan");
yield return new Employee("Gerri", "Elliott");
yield return new Employee("Stephen", "Elop");
yield return new Employee("Ben", "Fathi");
yield return new Employee("Grant", "George");
yield return new Employee("Tom", "Gibbons");
yield return new Employee("L. Michael", "Golden");
yield return new Employee("Alexander", "Gounares");
yield return new Employee("Steve", "Guggenheimer");
yield return new Employee("Anoop", "Gupta");
yield return new Employee("Tony", "Hey");
yield return new Employee("Yasuyuki", "Higuchi");
yield return new Employee("Roz", "Ho");
yield return new Employee("Kathleen", "Hogan");
yield return new Employee("Frank", "Holland");
yield return new Employee("Todd", "Holmdahl");
yield return new Employee("Darren", "Huston");
yield return new Employee("Rajesh", "Jha");
yield return new Employee("Chris", "Jones");
yield return new Employee("Erik", "Jorgensen");
yield return new Employee("Rich", "Kaplan");
yield return new Employee("Bob", "Kelly");
yield return new Employee("Jawad", "Khaki");
yield return new Employee("Shane", "Kim");
yield return new Employee("Peter", "Klein");
yield return new Employee("Mitchell L.", "Koch");
yield return new Employee("Ted", "Kummert");
yield return new Employee("Julie", "Larson-Green");
yield return new Employee("Antoine", "Leblond");
yield return new Employee("Andrew", "Lees");
yield return new Employee("John M.", "Lervik");
yield return new Employee("Lewis", "Levin");
yield return new Employee("Dan'l", "Lewin");
yield return new Employee("Moshe", "Lichtman");
yield return new Employee("Christopher", "Liddell");
yield return new Employee("Steve", "Liffick");
yield return new Employee("Brian", "MacDonald");
yield return new Employee("Ron", "Markezich");
yield return new Employee("Maria", "Martinez");
yield return new Employee("Mich", "Mathews");
yield return new Employee("Don A.", "Mattrick");
yield return new Employee("Joe", "Matz");
yield return new Employee("Brian", "McAndrews");
yield return new Employee("Richard", "McAniff");
yield return new Employee("Yusuf", "Mehdi");
yield return new Employee("Jim", "Minervino");
yield return new Employee("William H.", "Mitchell");
yield return new Employee("Jens Winther", "Moberg");
yield return new Employee("Mindy", "Mount");
yield return new Employee("Bob", "Muglia");
yield return new Employee("Craig", "Mundie");
yield return new Employee("Terry", "Myerson");
yield return new Employee("Satya", "Nadella");
yield return new Employee("Mike", "Nash");
yield return new Employee("Peter", "Neupert");
yield return new Employee("Ray", "Ozzie");
yield return new Employee("Gurdeep", "Singh Pall");
yield return new Employee("Michael", "Park");
yield return new Employee("Umberto", "Paolucci");
yield return new Employee("Sanjay", "Parthasarathy");
yield return new Employee("Pamela", "Passman");
yield return new Employee("Alain", "Peracca");
yield return new Employee("Todd", "Peters");
yield return new Employee("Joe", "Peterson");
yield return new Employee("Marshall C.", "Phelps, Jr.");
yield return new Employee("Scott", "Pitasky");
yield return new Employee("Will", "Poole");
yield return new Employee("Rick", "Rashid");
yield return new Employee("Tami", "Reller");
yield return new Employee("J.", "Ritchie");
yield return new Employee("Enrique", "Rodriguez");
yield return new Employee("Eduardo", "Rosini");
yield return new Employee("Jon", "Roskill");
yield return new Employee("Eric", "Rudder");
yield return new Employee("John", "Schappert");
yield return new Employee("Tony", "Scott");
yield return new Employee("Jeanne", "Sheldon");
yield return new Employee("Harry", "Shum");
yield return new Employee("Steven", "Sinofsky");
yield return new Employee("Brad", "Smith");
yield return new Employee("Mary E.", "Snapp");
yield return new Employee("Amitabh", "Srivastava");
yield return new Employee("Kirill", "Tatarinov");
yield return new Employee("Jeff", "Teper");
yield return new Employee("David", "Thompson");
yield return new Employee("Rick", "Thompson");
yield return new Employee("Brian", "Tobey");
yield return new Employee("David", "Treadwell");
yield return new Employee("B. Kevin", "Turner");
yield return new Employee("David", "Vaskevitch");
yield return new Employee("Bill", "Veghte");
yield return new Employee("Henry P.", "Vigil");
yield return new Employee("Robert", "Wahbe");
yield return new Employee("Todd", "Warren");
yield return new Employee("Allison", "Watson");
yield return new Employee("Blair", "Westlake");
yield return new Employee("Simon", "Witts");
yield return new Employee("Robert", "Youngjohns");
yield return new Employee("Ya-Qin", "Zhang");
yield return new Employee("George", "Zinn");
}
}
#endregion
}
public class SampleEmployeeCollection : ObjectCollection 
...{
public SampleEmployeeCollection() : base(Employee.AllExecutives)
...{}
}件并引用到项目中来),如下图所示:

xmlns:controls="clr-namespace:Microsoft.Windows.Controls;assembly=Microsoft.Windows.Controls"
IsTextCompletionEnabled:该属性为True时,用于将当前被查询到的第一条记录的信息暂时放在控件的输入框中
(text属性),上图中已看到。


ItemsSource:用于绑定相应的数据源信息(...{StaticResource SampleEmployees})
点击展开示例

点击展开示例
点击展开示例
SearchMode:查询方式,其提供了对当前已输入字符的查询方式,有如下几种枚举值:
StartsWithCaseSensitive:以大写已输入字符方式开始。
StartsWith:以已输入字符开始(不区别大小写)。
Contains:是否包含已输入字符
ContainsCaseSensitive:是否包含已输入大写字符.
Equals:是否字符相等
EqualsCaseSensitive:是否大写字符相等
.
MinimumPrefixLength:用于当输入的字符串达到该属性值时,才显示下拉列表框。
NowAutoComplete.Populating += OnPopulatingSynchronous;
点击展开示例
private void OnPopulatingSynchronous(object sender, PopulatingEventArgs e) 
...{
AutoCompleteBox source = (AutoCompleteBox)sender;
source.ItemsSource = new string[] 
...{
e.Parameter + "后续内容1",
e.Parameter + "后续内容2",
e.Parameter + "后续内容3",
};
}

点击展开示例


点击展开示例
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class AutoCompletedService 
...{
[OperationContract]
public List<EmployeeInfo> GetEmployeeCollection(string name) 
...{
List<EmployeeInfo> EmpolyeeList = new List<EmployeeInfo>();
foreach (EmployeeInfo ei in (from employeeinfo in EmployeeInfo.AllExecutives
where employeeinfo.DisplayName.StartsWith(name)
select employeeinfo)) 
...{
EmpolyeeList.Add(ei);
}
return EmpolyeeList;
}
} 
点击展开示例
void Page_Loaded(object sender, RoutedEventArgs e) 
...{
WCFAutoComplete.IsTextCompletionEnabled = false;
WCFAutoComplete.SearchMode = AutoCompleteSearchMode.None;
WCFAutoComplete.Populating += (s, args) => 
...{
args.Cancel = true;
AutoCompletedServiceClient acsc = new AutoCompletedServiceClient();
acsc.GetEmployeeCollectionCompleted += new EventHandler<GetEmployeeCollectionCompletedEventArgs>
(acsc_GetEmployeeCollectionCompleted);
acsc.GetEmployeeCollectionAsync(args.Parameter, s);
};
}
点击展开示例
void acsc_GetEmployeeCollectionCompleted(object sender, GetEmployeeCollectionCompletedEventArgs e) 
...{
AutoCompleteBox acb = e.UserState as AutoCompleteBox;
if (acb != null && e.Error == null && !e.Cancelled) 
...{
if (e.Result.Count > 0) 
...{
List<string> employeeStrList = new List<string>();
foreach(EmployeeInfo employeeinfo in e.Result) 
...{
employeeStrList.Add(employeeinfo.FirstName + " " + employeeinfo.LastName);
}
acb.ItemsSource = employeeStrList;
acb.PopulateComplete();
}
}
}