zoukankan      html  css  js  c++  java
  • [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,这里只是一个拉丁文的测试文件,所以需要自已来实现字库文件)。

            <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>

    这个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<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();
    }
    }
    }
    }

  • 相关阅读:
    TP5中的小知识
    php中Redis的扩展
    html js css压缩工具 可以实现代码压缩
    Python 基础
    操作系统简介
    计算机硬件
    Linux命令 比较文件
    Linux命令 查看及修改文件属性
    Linux命令 文件备份归档恢复
    Linux命令 文件的建立移动删除
  • 原文地址:https://www.cnblogs.com/DebugLZQ/p/2437996.html
Copyright © 2011-2022 走看看