微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

稳扎稳打Silverlight(32) - 2.0Tip/Trick之MessageBox, Popup, 循环的几种实现方法, 动态变换主题, 本地化(多语言), 响应鼠标双击事件

[索引页]
[源码下载]


稳扎稳打Silverlight(32) - 2.0Tip/Trick之MessageBox,Popup,循环的几种实现方法,动态变换主题,本地化(多语言),响应鼠标双击事件


作者: webabcd


介绍
Silverlight 2.0 提示和技巧系列
  • MessageBox - MessageBox 的演示 
  • Popup - Popup 弹窗口的演示 
  • 循环的几种实现方法 - dispatcherTimer 方式,Storyboard 方式,Timer 方式,  CompositionTarget.Rendering 方式
  • 动态变换主题 - 演示如何动态地变换主题 
  • 本地化(多语言) - 演示如何实现对多语言的支持
  • 响应鼠标双击事件 - 响应并处理鼠标的双击事件


在线DEMO
http://www.cnblogs.com/webabcd/archive/2008/10/09/1307486.html


示例
1、演示 MessageBox
MessageBoxDemo.xaml 

<@H_502_49@ UserControl @H_502_49@ x:Class@H_502_49@ ="Silverlight20.Tip.MessageBoxDemo"@H_502_49@

    xmlns@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"@H_502_49@  

    xmlns:x@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml"@H_502_49@ >@H_502_49@

    @H_502_49@ <@H_502_49@ Grid @H_502_49@ x:Name@H_502_49@ ="LayoutRoot"@H_502_49@  Background@H_502_49@ ="White"@H_502_49@ >@H_502_49@

        @H_502_49@ <@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

            @H_502_49@ <@H_502_49@ Button @H_502_49@ x:Name@H_502_49@ ="btnMessageBox"@H_502_49@  Content@H_502_49@ ="MessageBox 演示"@H_502_49@  Click@H_502_49@ ="btnMessageBox_Click"@H_502_49@  Margin@H_502_49@ ="5"@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ x:Name@H_502_49@ ="lblResult"@H_502_49@  @H_502_49@ />@H_502_49@

        @H_502_49@ </@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

    @H_502_49@ </@H_502_49@ Grid@H_502_49@ >@H_502_49@

@H_502_49@ </@H_502_49@ UserControl@H_502_49@ >@H_502_49@

@H_502_49@

MessageBoxDemo.xaml.cs

using@H_502_49@  System;

@H_502_49@ using@H_502_49@  System.Collections.Generic;

@H_502_49@ using@H_502_49@  System.Linq;

@H_502_49@ using@H_502_49@  System.Net;

@H_502_49@ using@H_502_49@  System.Windows;

@H_502_49@ using@H_502_49@  System.Windows.Controls;

@H_502_49@ using@H_502_49@  System.Windows.Documents;

@H_502_49@ using@H_502_49@  System.Windows.Input;

@H_502_49@ using@H_502_49@  System.Windows.Media;

@H_502_49@ using@H_502_49@  System.Windows.Media.Animation;

@H_502_49@ using@H_502_49@  System.Windows.Shapes;


@H_502_49@ namespace@H_502_49@  Silverlight20.Tip

@H_502_49@


2、演示 Popup 弹出窗口
PopupDemo.xaml

<@H_502_49@ UserControl @H_502_49@ x:Class@H_502_49@ ="Silverlight20.Tip.PopupDemo"@H_502_49@

    xmlns@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"@H_502_49@  

    xmlns:x@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml"@H_502_49@ >@H_502_49@

    @H_502_49@ <@H_502_49@ Grid @H_502_49@ x:Name@H_502_49@ ="LayoutRoot"@H_502_49@  Background@H_502_49@ ="White"@H_502_49@ >@H_502_49@

        @H_502_49@ <@H_502_49@ Button @H_502_49@ x:Name@H_502_49@ ="btnPopup"@H_502_49@  Content@H_502_49@ ="弹出新窗口"@H_502_49@  Margin@H_502_49@ ="5"@H_502_49@  Width@H_502_49@ ="80"@H_502_49@  Height@H_502_49@ ="40"@H_502_49@  Click@H_502_49@ ="btnPopup_Click"@H_502_49@  HorizontalAlignment@H_502_49@ ="Left"@H_502_49@  VerticalAlignment@H_502_49@ ="Top"@H_502_49@  @H_502_49@ />@H_502_49@

    @H_502_49@ </@H_502_49@ Grid@H_502_49@ >@H_502_49@

@H_502_49@ </@H_502_49@ UserControl@H_502_49@ >@H_502_49@

@H_502_49@

PopupDemo.xaml.cs



3、做循环程序的几种实现方法
LoopsDemo.xaml

<@H_502_49@ UserControl @H_502_49@ x:Class@H_502_49@ ="Silverlight20.Tip.LoopsDemo"@H_502_49@

    xmlns@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"@H_502_49@  

    xmlns:x@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml"@H_502_49@ >@H_502_49@

    @H_502_49@ <@H_502_49@ Grid @H_502_49@ x:Name@H_502_49@ ="LayoutRoot"@H_502_49@  Background@H_502_49@ ="White"@H_502_49@ >@H_502_49@

        @H_502_49@ <@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

            @H_502_49@ <@H_502_49@ StackPanel @H_502_49@ Orientation@H_502_49@ ="Horizontal"@H_502_49@  Margin@H_502_49@ ="5"@H_502_49@ >@H_502_49@

                @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ Text@H_502_49@ ="dispatcherTimer: "@H_502_49@  @H_502_49@ />@H_502_49@

                @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ x:Name@H_502_49@ ="resultdispatcherTimer"@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ </@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

            @H_502_49@ <@H_502_49@ StackPanel @H_502_49@ Orientation@H_502_49@ ="Horizontal"@H_502_49@  Margin@H_502_49@ ="5"@H_502_49@ >@H_502_49@

                @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ Text@H_502_49@ ="Timer: "@H_502_49@  @H_502_49@ />@H_502_49@

                @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ x:Name@H_502_49@ ="resultTimer"@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ </@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

            @H_502_49@ <@H_502_49@ StackPanel @H_502_49@ Orientation@H_502_49@ ="Horizontal"@H_502_49@  Margin@H_502_49@ ="5"@H_502_49@ >@H_502_49@

                @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ Text@H_502_49@ ="StoryBoard: "@H_502_49@  @H_502_49@ />@H_502_49@

                @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ x:Name@H_502_49@ ="resultStoryBoard"@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ </@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

            @H_502_49@ <@H_502_49@ StackPanel @H_502_49@ Orientation@H_502_49@ ="Horizontal"@H_502_49@  Margin@H_502_49@ ="5"@H_502_49@ >@H_502_49@

                @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ Text@H_502_49@ ="CompositionTarget: "@H_502_49@  @H_502_49@ />@H_502_49@

                @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ x:Name@H_502_49@ ="resultCompositionTarget"@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ </@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

        @H_502_49@ </@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

    @H_502_49@ </@H_502_49@ Grid@H_502_49@ >@H_502_49@

@H_502_49@ </@H_502_49@ UserControl@H_502_49@ >@H_502_49@

@H_502_49@

LoopsDemo.xaml.cs

using@H_502_49@  System;

@H_502_49@ using@H_502_49@  System.Collections.Generic;

@H_502_49@ using@H_502_49@  System.Linq;

@H_502_49@ using@H_502_49@  System.Net;

@H_502_49@ using@H_502_49@  System.Windows;

@H_502_49@ using@H_502_49@  System.Windows.Controls;

@H_502_49@ using@H_502_49@  System.Windows.Documents;

@H_502_49@ using@H_502_49@  System.Windows.Input;

@H_502_49@ using@H_502_49@  System.Windows.Media;

@H_502_49@ using@H_502_49@  System.Windows.Media.Animation;

@H_502_49@ using@H_502_49@  System.Windows.Shapes;


@H_502_49@ using@H_502_49@  System.Windows.Threading;

@H_502_49@ using@H_502_49@  System.Threading;


@H_502_49@ namespace@H_502_49@  Silverlight20.Tip

@H_502_49@


4、动态变换主题(以 Toolkit 中的主题为例,引用 System.Windows.Controls.Theming.Toolkit.dll 和需要用到的相关主题文件)
ThemeDemo.xaml

<@H_502_49@ UserControl @H_502_49@ x:Class@H_502_49@ ="Silverlight20.Tip.ThemeDemo"@H_502_49@

    xmlns@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"@H_502_49@  

    xmlns:x@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml"@H_502_49@ >@H_502_49@

    @H_502_49@ <@H_502_49@ Grid @H_502_49@ x:Name@H_502_49@ ="LayoutRoot"@H_502_49@  Background@H_502_49@ ="White"@H_502_49@ >@H_502_49@

        @H_502_49@ <@H_502_49@ Button @H_502_49@ Content@H_502_49@ ="ExpressionDark 样式"@H_502_49@  Width@H_502_49@ ="120"@H_502_49@  Height@H_502_49@ ="40"@H_502_49@  VerticalAlignment@H_502_49@ ="Top"@H_502_49@  HorizontalAlignment@H_502_49@ ="Left"@H_502_49@  Margin@H_502_49@ ="5"@H_502_49@  Click@H_502_49@ ="Button_Click"@H_502_49@ ></@H_502_49@ Button@H_502_49@ >@H_502_49@

    @H_502_49@ </@H_502_49@ Grid@H_502_49@ >@H_502_49@

@H_502_49@ </@H_502_49@ UserControl@H_502_49@ >@H_502_49@


@H_502_49@ <!--@H_502_49@

    

在 xaml 文件中声明的方式使用主题

    

<UserControl x:Class="Silverlight20.Tip.ThemeDemo"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:myTheme="clr-namespace:System.Windows.Controls.Theming;assembly=System.Windows.Controls.Theming.Toolkit">

    <Grid x:Name="LayoutRoot" Background="White"

          myTheme:ImplicitStyleManager.ApplyMode="Auto" 

          myTheme:ImplicitStyleManager.ResourceDictionaryUri="/Silverlight20;component/Theme/System.Windows.Controls.Theming.ExpressionDark.xaml"

    >

        <Button Content="ExpressionDark 样式" Width="120" Height="40" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="5"></Button>

    </Grid>

</UserControl>

@H_502_49@ -->@H_502_49@

ThemeDemo.xaml.cs

using@H_502_49@  System;

@H_502_49@ using@H_502_49@  System.Collections.Generic;

@H_502_49@ using@H_502_49@  System.Linq;

@H_502_49@ using@H_502_49@  System.Net;

@H_502_49@ using@H_502_49@  System.Windows;

@H_502_49@ using@H_502_49@  System.Windows.Controls;

@H_502_49@ using@H_502_49@  System.Windows.Documents;

@H_502_49@ using@H_502_49@  System.Windows.Input;

@H_502_49@ using@H_502_49@  System.Windows.Media;

@H_502_49@ using@H_502_49@  System.Windows.Media.Animation;

@H_502_49@ using@H_502_49@  System.Windows.Shapes;


@H_502_49@ using@H_502_49@  System.Windows.Controls.Theming;


@H_502_49@ namespace@H_502_49@  Silverlight20.Tip

@H_502_49@


5、演示如何实现本地化(多语言的支持
LocalizationDemo.xaml

<@H_502_49@ UserControl @H_502_49@ x:Class@H_502_49@ ="Silverlight20.Tip.LocalizationDemo"@H_502_49@

    xmlns@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"@H_502_49@  

    xmlns:x@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml"@H_502_49@

    xmlns:res@H_502_49@ ="clr-namespace:Silverlight20.Resource"@H_502_49@ >@H_502_49@

    @H_502_49@ <@H_502_49@ StackPanel @H_502_49@ Orientation@H_502_49@ ="Vertical"@H_502_49@ >@H_502_49@

        

        @H_502_49@ <@H_502_49@ StackPanel @H_502_49@ Margin@H_502_49@ ="5"@H_502_49@ >@H_502_49@

            @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ Text@H_502_49@ ="姓名: "@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ x:Name@H_502_49@ ="lblName"@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ <@H_502_49@ TextBlock  @H_502_49@ Text@H_502_49@ ="年龄: "@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ x:Name@H_502_49@ ="lblAge"@H_502_49@  @H_502_49@ />@H_502_49@

        @H_502_49@ </@H_502_49@ StackPanel@H_502_49@ >@H_502_49@


        @H_502_49@ <!--@H_502_49@ 通过声明的方式调用指定的本地化资源@H_502_49@ -->@H_502_49@

        @H_502_49@ <@H_502_49@ StackPanel.Resources@H_502_49@ >@H_502_49@

            @H_502_49@ <@H_502_49@ res:Localization @H_502_49@ x:Name@H_502_49@ ="myRes"@H_502_49@  @H_502_49@ />@H_502_49@

        @H_502_49@ </@H_502_49@ StackPanel.Resources@H_502_49@ >@H_502_49@

        @H_502_49@ <@H_502_49@ StackPanel @H_502_49@ Margin@H_502_49@ ="5"@H_502_49@ >@H_502_49@

            @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ Text@H_502_49@ ="姓名: "@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ Text@H_502_49@ ="@H_502_49@ {Binding Name, Source={StaticResource myRes}}@H_502_49@ "@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ <@H_502_49@ TextBlock  @H_502_49@ Text@H_502_49@ ="年龄: "@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ <@H_502_49@ TextBlock @H_502_49@ Text@H_502_49@ ="@H_502_49@ {Binding Age, Source={StaticResource myRes}}@H_502_49@ "@H_502_49@  @H_502_49@ />@H_502_49@

        @H_502_49@ </@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

        

    @H_502_49@ </@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

@H_502_49@ </@H_502_49@ UserControl@H_502_49@ >@H_502_49@

@H_502_49@

LocalizationDemo.xaml.cs


在 Application 中指定 Culture

private@H_502_49@  @H_502_49@ void@H_502_49@  Application_Startup(@H_502_49@ object@H_502_49@  sender, StartupEventArgs e)

@H_502_49@

在 object 标记中指定 Culture

<!--@H_502_49@ 演示如何在 Silverlight 中实现本地化@H_502_49@ -->@H_502_49@

@H_502_49@ <!--@H_502_49@ 通过为 object 标记设置如下参数来实现本地化(指定资源)@H_502_49@ -->@H_502_49@

@H_502_49@ <@H_502_49@ param @H_502_49@ name@H_502_49@ ="culture"@H_502_49@  value@H_502_49@ ="en-US"@H_502_49@  @H_502_49@ />@H_502_49@

@H_502_49@ <@H_502_49@ param @H_502_49@ name@H_502_49@ ="uiculture"@H_502_49@  value@H_502_49@ ="en-Us"@H_502_49@  @H_502_49@ />@H_502_49@

@H_502_49@


6、响应并处理鼠标的双击事件
DoubleClick.xaml

<@H_502_49@ UserControl @H_502_49@ x:Class@H_502_49@ ="Silverlight20.Tip.DoubleClick"@H_502_49@

    xmlns@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"@H_502_49@  

    xmlns:x@H_502_49@ ="http://schemas.microsoft.com/winfx/2006/xaml"@H_502_49@ >@H_502_49@

    @H_502_49@ <@H_502_49@ Grid @H_502_49@ x:Name@H_502_49@ ="LayoutRoot"@H_502_49@  Background@H_502_49@ ="White"@H_502_49@ >@H_502_49@

        @H_502_49@ <@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

            @H_502_49@ <@H_502_49@ Button @H_502_49@ x:Name@H_502_49@ ="btn"@H_502_49@  Content@H_502_49@ ="Double Click Me"@H_502_49@  Margin@H_502_49@ ="5"@H_502_49@  Click@H_502_49@ ="btn_Click"@H_502_49@  @H_502_49@ />@H_502_49@

            @H_502_49@ <@H_502_49@ TextBox @H_502_49@ x:Name@H_502_49@ ="result"@H_502_49@  Margin@H_502_49@ ="5"@H_502_49@  @H_502_49@ />@H_502_49@

        @H_502_49@ </@H_502_49@ StackPanel@H_502_49@ >@H_502_49@

    @H_502_49@ </@H_502_49@ Grid@H_502_49@ >@H_502_49@

@H_502_49@ </@H_502_49@ UserControl@H_502_49@ >@H_502_49@

@H_502_49@

DoubleClick.xaml.cs

@H_831_4040@

@H_587_4043@

@H_775_4045@/**/@H_502_49@ @H_891_4047@/*@H_502_49@

 * 根据 dispatcherTimer 是否为启动状态判断在某一时间段内是否按了两次鼠标左键

 *     第一按鼠标左键则启动 dispatcherTimer,双击或者到了间隔时间则停止 dispatcherTimer

 *     每次按键,如果 dispatcherTimer 为启动状态,即为双击

 @H_502_49@*/@H_502_49@@H_502_49@


@H_502_49@ using@H_502_49@  System;

@H_502_49@ using@H_502_49@  System.Collections.Generic;

@H_502_49@ using@H_502_49@  System.Linq;

@H_502_49@ using@H_502_49@  System.Net;

@H_502_49@ using@H_502_49@  System.Windows;

@H_502_49@ using@H_502_49@  System.Windows.Controls;

@H_502_49@ using@H_502_49@  System.Windows.Documents;

@H_502_49@ using@H_502_49@  System.Windows.Input;

@H_502_49@ using@H_502_49@  System.Windows.Media;

@H_502_49@ using@H_502_49@  System.Windows.Media.Animation;

@H_502_49@ using@H_502_49@  System.Windows.Shapes;


@H_502_49@ using@H_502_49@  System.Windows.Threading;


@H_502_49@ namespace@H_502_49@  Silverlight20.Tip

@H_502_49@


OK
[源码下载]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐