beckham79 发表于 2015-5-12 10:53:46

[Winodows Phone 7控件详解]Silverlight toolkit for Windows Phone 7.1控件-5

  11年11月初,微软的silverlight toolkit for phone又放出四个新控件,这四个控件使用都要比之前的复杂,并且很有用。
  6.AutoCompleteBox
  这个控件很像ajax里的输入框,可以联想词。不过需要自已生成一个词库文件,还要编写代码来加载词载。在silverlgiht toolkit sample里面已经有这个示例代码了(loremIpsum.cs,loremIpsum.txt,这里只是一个拉丁文的测试文件,所以需要自已来实现字库文件)。



      
            
      


xmlns:data="clr-namespace:testNewControls.Data"


   
      
   
  这个Resource定义一定要在AutoComepleteBox前面,不然会报一个很奇怪的错误。
LoremIpsum.cs的完整代码如下:



// (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(this Random rnd, IList list)
      {
            return list;
      }
    }
    ///
    /// A class to return paragraphs of random sentences or a word list from lorem ipsum data.
    ///
    public class LoremIpsum : IEnumerable
    {
      public enum Capitalization
      {
            None,
            FirstWord,
            AllWords
      }
      private static Random _rnd = new Random(42);
      private static StringBuilder _builder = new StringBuilder();
      private static List _sentences;
      private static List _words;

      ///
      /// Returns random lorem ipsum sentences combined into a single string.
      ///
      /// The nunmber of sentences.
      /// The paragraph, composed of random sentences.
      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();
      }
      ///
      /// Return an alphabetized, lower-case list of lorem ipsum words.
      ///
      public static ICollection Words
      {
            get
            {
                EnsureWords();
                return (ICollection)_words;
            }
      }
      ///
      /// Get a string composed of random lorem ipsum words. Will not end with punctuation.
      ///
      /// Number of words.
      /// How to capitalize the words.
      ///
      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 = char.ToUpper(_builder);
                }
                if (wordCount > 0)
                {
                  _builder.Append(' ');
                }
            }
            return _builder.ToString();
      }
      ///
      /// Enumerates the Words property.
      ///
      /// The enumerator.
      public IEnumerator GetEnumerator()
      {
            return LoremIpsum.Words.GetEnumerator();
      }
      ///
      /// Enumerates the Words property.
      ///
      /// The enumerator.
      IEnumerator IEnumerable.GetEnumerator()
      {
            return LoremIpsum.Words.GetEnumerator();
      }
      ///
      /// Reads the lorem ipsum sentences. Supplies some data in case reading fails, which
      /// it will do at design time.
      ///
      private static void EnsureSentences()
      {
            if (_sentences == null)
            {
                _sentences = new List();
                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.");
                }
            }
      }
      ///
      /// Creates an alphabetized list of the words from the lorem ipsum text.
      ///
      private static void EnsureWords()
      {
            char[] separators = { ' ', ',', '.' };
            EnsureSentences();
            if (_words == null)
            {
                Dictionary temp = new Dictionary();
                foreach (string sentence in _sentences)
                {
                  string[] words = sentence.Split(separators, StringSplitOptions.RemoveEmptyEntries);
                  foreach (string word in words)
                  {
                        temp = null;
                  }
                }
                _words = new List(temp.Keys);
                _words.Sort();
            }
      }
    }
}

  
页: [1]
查看完整版本: [Winodows Phone 7控件详解]Silverlight toolkit for Windows Phone 7.1控件-5