[Winodows Phone 7控制項詳解]Silverlight toolkit for Windows Phone 7.1控制項-5

來源:互聯網
上載者:User

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.