65.9K
CodeProject 正在变化。 阅读更多。
Home

Wp7nl 工具贡献

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.53/5 (5投票s)

2013年7月4日

CPOL

4分钟阅读

viewsIcon

7869

Wp7nl 工具贡献

在构建 Windows Phone 应用时,我使用我自己的库。我是一个“懒惰”的开发者,不喜欢重复编写代码。因此,我将大量可重用的代码,如行为(behaviors)、转换器(converters)和扩展方法(extension methods),放在我的库中。一段时间以来,我一直在考虑将这个库作为开源项目分享到 Codeplex,但最终决定为 Joost van Schaik 的 Wp7nl Utilities 项目做出贡献。第一批实用工具已添加。我将继续添加更多,并在我的博客上进行介绍。

启动器的操作 (Actions for Launchers)

行为在我的应用程序中,我经常需要执行简单的触发器操作。例如,在 Internet Explorer 中打开一个 URL 或发送一封电子邮件。因为我大量使用 Blend(而且我就是很懒 ;)),我只是喜欢将一个操作拖放到一个按钮或文本块上,然后就完成了。操作和行为的优点在于你可以绑定属性,这使得它们在模板中非常有用。

目前,Windows Phone 启动器(Launchers)中只有少数几种可以用作触发器操作,但我相信这个列表会随着时间的推移而增长。如果您希望添加某种操作,请告诉我,我会尽力而为。

NavigateToUrlAction (导航到 URL 操作)

使用这些操作非常简单。围绕操作的代码对于所有操作来说几乎都是相同的,只有事件名称可能会有所不同。NavigateToUrlAction 执行一个 WebBrowserTask。它打开 `Url` 属性,这样你就可以绑定到它。作为一个小小的附加功能,它会检查网络连接是否可用,并在不可用时显示一条消息。这条消息也可以自定义。

<Button Content="Wp7nl" HorizontalAlignment="Left" VerticalAlignment="Top">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Tap">
            <behaviors:NavigateToUrlAction Url="http://wp7nl.codeplex.com"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

SendEmailAction (发送邮件操作)

此操作执行 EmailComposeTask。可以绑定“To”(收件人)、“Subject”(主题)和“Body”(正文)属性。

NavigatieToMarketplaceDetailAction (导航到应用商店详情页操作)

此操作执行 MarketPlaceDetailTask。它会打开应用商店并显示你的应用的详细信息。

NavigatieToReviewAction (导航到评论页操作)

让用户评论你的应用对于应用的成功至关重要。此操作执行 MarketplaceReviewTask,让用户非常容易地进行评论。

ShareLinkAction (分享链接操作)

在应用中分享链接是一项非常常见的任务。此操作执行 ShareLinkTask。这样你就可以利用手机的原生分享功能。可以绑定“LinkUri”(链接 URI)、“Message”(消息)和“Title”(标题)属性。

Limit TextBox Behavior (限制文本框行为)

我遇到过需要限制用户输入字符数的情况。此行为只能与 TextBox 元素一起使用。你可以通过“MaxChars”属性设置最大可输入字符数。作为一项附加功能,当达到最大字符数时,可以使手机轻微震动。

<TextBox x:Name="LimitedTextbox">
    <i:Interaction.Behaviors>
        <behaviors:LimitTextBoxBehavior MaxChars="25" Vibrate="True"/>
    </i:Interaction.Behaviors>
</TextBox>

Visible On Locale Behavior (按区域设置显示行为)

VisibleOnLocaleBehavior 会将附加的元素设置为可见,前提是手机的当前 UI 语言与指定的两个字母 ISO 语言名称匹配,否则会隐藏它。当你有某些元素(如图片)是特定于语言的时,可以使用此行为。

<TextBlock Text="English" >
    <i:Interaction.Behaviors>
        <behaviors:VisibleOnLocaleBehavior LanguageCode="en"/>
    </i:Interaction.Behaviors>
</TextBlock>
<TextBlock Text="Nederlands">
    <i:Interaction.Behaviors>
        <behaviors:VisibleOnLocaleBehavior LanguageCode="nl"/>
    </i:Interaction.Behaviors>
</TextBlock>

Visibility In Trial Behavior (试用版模式下可见性行为)

VisibilityInTrialBehavior 会在应用处于试用模式时,将附加的元素设置为可见或折叠。附加元素是否可见或折叠由“Visibility”属性决定。

<TextBlock Text="Not in trial mode">
    <i:Interaction.Behaviors>
        <behaviors:VisibilityInTrialBehavior Visibility="Collapsed"/>
    </i:Interaction.Behaviors>
</TextBlock>

此行为利用了 TrialHelper。这个辅助类用于检查应用是否处于试用模式。为了能够运行你的应用程序的试用模式,你可以在调试时添加“TRIAL”作为条件编译符号来模拟。

image

Converters

我在 Wp7nl 库中添加了一些转换器。其中大多数都非常简单。

ObjectToStringValueConverter (对象转字符串值转换器)

让我们从最需要解释的那个开始。ObjectToStringConverter 用于创建对象的更美观的表示。在转换器参数中,将绑定对象属性放在 { } 之间。

Person 类为例。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

当你希望 textblock 显示姓氏和名字,并用逗号分隔时,你可以直接将其添加到转换器参数中。

在此示例中,我在构造函数中直接将 mainpagedatacontext 设置为 person 类的一个新实例。在实际应用中你可能不会这样做,但你会明白我的意思。

public MainPage()
{
    InitializeComponent();
    DataContext = new Person{FirstName = "Larry", LastName = "Laffer"};
}

然后,我为 textblock 添加了一个 databinding

<TextBlock Text="{Binding ConverterParameter=\{LastName\}\, \{FirstName\}, 
   Converter={StaticResource ObjectToStringValueConverter}}"/>

在 Blend 中创建绑定时,你不需要转义花括号,如下面的图片所示。

image

NullToCollapsedConverter (Null 转折叠转换器)

对于任何值为 null、空字符串、仅包含空格或空 GUID 的值,返回 Visibility.Collapsed。非常适合隐藏空白内容。例如,如果 URL 为空,你可能不想显示一个导航到 URL 的按钮。

StripHtmlValueConverter (去除 HTML 值转换器)

移除 string 中的所有 HTML 并将‘&XXXX’解码为常规字符。当从 Twitter 或 Facebook 等外部服务请求数据时,数据通常会包含 HTML。这些 HTML 需要被转换为普通 string 或某种富文本块。此转换器执行第一项任务,即移除所有 HTML。<BR /> 标签会被替换为换行符。

ToLowerValueConverter (转小写值转换器)

string 转换为全小写字符。对于标题很有用。

ToUpperValueConverter (转大写值转换器)

string 转换为全大写字符。对于标题很有用。

© . All rights reserved.