In the early November S, Microsoft's Silverlight toolkit for phone released four new controls, both of which were more complex and useful.
6. autocompletebox
This control is similar to the input box in Ajax and can be associated with words. However, you need to generate a dictionary file and write code to load the word load. In the silverlgiht toolkit sample, we already have this example code (loremipsum.cs,loremipsum.txt. Here is only a Latin test file, so we need to implement the font file by ourselves ).
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<toolkit:AutoCompleteBox HorizontalAlignment="Left" Margin="63,43,0,0" Name="autoCompleteBox1" VerticalAlignment="Top" Width="317" Height="72" ItemsSource="{StaticResource words}" />
</Grid>
xmlns:data="clr-namespace:testNewControls.Data"
<phone:PhoneApplicationPage.Resources>
<data:LoremIpsum x:Name="words"/>
</phone:PhoneApplicationPage.Resources>
This resource definition must be prior to autocomepletebox. Otherwise, a strange error will be reported.
The complete code of loremipsum. CS is as follows:
// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Public License (Ms-PL).
// Please see http://go.microsoft.com/fwlink/?LinkID=131993 for details.
// All other rights reserved.
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Resources;
namespace testNewControls.Data
{
public static class Extension
{
public static T Next<T>(this Random rnd, IList<T> list)
{
return list[rnd.Next(list.Count)];
}
}
/// <summary>
/// A class to return paragraphs of random sentences or a word list from lorem ipsum data.
/// </summary>
public class LoremIpsum : IEnumerable<string>
{
public enum Capitalization
{
None,
FirstWord,
AllWords
}
private static Random _rnd = new Random(42);
private static StringBuilder _builder = new StringBuilder();
private static List<string> _sentences;
private static List<string> _words;
/// <summary>
/// Returns random lorem ipsum sentences combined into a single string.
/// </summary>
/// <param name="sentenceCount">The nunmber of sentences.</param>
/// <returns>The paragraph, composed of random sentences.</returns>
public static string GetParagraph(int sentenceCount)
{
EnsureSentences();
_builder.Length = 0;
while (sentenceCount-- > 0)
{
_builder.Append(_rnd.Next(_sentences));
if (sentenceCount > 0)
{
_builder.Append(' ');
}
}
return _builder.ToString();
}
/// <summary>
/// Return an alphabetized, lower-case list of lorem ipsum words.
/// </summary>
public static ICollection<string> Words
{
get
{
EnsureWords();
return (ICollection<string>)_words;
}
}
/// <summary>
/// Get a string composed of random lorem ipsum words. Will not end with punctuation.
/// </summary>
/// <param name="wordCount">Number of words.</param>
/// <param name="capitalize">How to capitalize the words.</param>
/// <returns></returns>
public static string GetWords(int wordCount, Capitalization capitalization)
{
EnsureWords();
_builder.Length = 0;
while (wordCount-- > 0)
{
int position = _builder.Length;
_builder.Append(_rnd.Next(_words));
if (capitalization == Capitalization.AllWords || (position == 0 && capitalization == Capitalization.FirstWord))
{
_builder[position] = char.ToUpper(_builder[position]);
}
if (wordCount > 0)
{
_builder.Append(' ');
}
}
return _builder.ToString();
}
/// <summary>
/// Enumerates the Words property.
/// </summary>
/// <returns>The enumerator.</returns>
public IEnumerator<string> GetEnumerator()
{
return LoremIpsum.Words.GetEnumerator();
}
/// <summary>
/// Enumerates the Words property.
/// </summary>
/// <returns>The enumerator.</returns>
IEnumerator IEnumerable.GetEnumerator()
{
return LoremIpsum.Words.GetEnumerator();
}
/// <summary>
/// Reads the lorem ipsum sentences. Supplies some data in case reading fails, which
/// it will do at design time.
/// </summary>
private static void EnsureSentences()
{
if (_sentences == null)
{
_sentences = new List<string>();
StreamResourceInfo info = Application.GetResourceStream(new Uri("Data/LoremIpsum.txt", UriKind.Relative));
if (info != null)
{
Stream stream = info.Stream;
if (stream != null)
{
using (StreamReader reader = new StreamReader(stream))
{
while (!reader.EndOfStream)
{
_sentences.Add(reader.ReadLine());
}
};
}
}
if (_sentences.Count == 0)
{
_sentences.Add("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.");
_sentences.Add("Maecenas porttitor congue massa.");
_sentences.Add("Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna.");
_sentences.Add("Nunc viverra imperdiet enim.");
_sentences.Add("Fusce est.");
}
}
}
/// <summary>
/// Creates an alphabetized list of the words from the lorem ipsum text.
/// </summary>
private static void EnsureWords()
{
char[] separators = { ' ', ',', '.' };
EnsureSentences();
if (_words == null)
{
Dictionary<string, object> temp = new Dictionary<string, object>();
foreach (string sentence in _sentences)
{
string[] words = sentence.Split(separators, StringSplitOptions.RemoveEmptyEntries);
foreach (string word in words)
{
temp[word.ToLower()] = null;
}
}
_words = new List<string>(temp.Keys);
_words.Sort();
}
}
}
}