稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八

稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八,第1张

概述[源码下载] 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八 作者: webabcd 介绍 Silverlight 4.0 其它: 打印 - Silverlight 4.0 中新增的对打印的支持   动态绑定 - 新增的 C# 4.0 的特性及其应用 增强的导航系统  杂七杂八 在线DEMO http://www.cnblogs.com/we [源码下载]

稳扎稳打Silverlight(48) - 4.0其它之打印,动态绑定,增强的导航系统,杂七杂八
作者: webabcd
介绍
Silverlight 4.0 其它:
打印 - Silverlight 4.0 中新增的对打印的支持   动态绑定 - 新增的 C# 4.0 的特性及其应用 增强的导航系统  杂七杂八
在线DEMO
http://www.cnblogs.com/webabcd/archive/2010/08/09/1795417.html
示例
1、演示在 Silverlight 4.0 中如何做打印 *** 作,以及如何打印多页
Print.xaml

代码 < navigation:Page  x:Class ="Silverlight40.Other.Print"  
           xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
           xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"  
           xmlns:d
="http://schemas.microsoft.com/Expression/blend/2008"
           xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
           xmlns:navigation
="clr-namespace:System.windows.Controls;assembly=System.windows.Controls.Navigation"
           Title
="Print Page" >
    
< GrID  x:name ="LayoutRoot" >
        
< StackPanel  HorizontalAlignment ="left" >

            
< TextBlock  name ="lblMsg"   />

            
< button  name ="btnPrint"  Content ="打印图片"  Click ="btnPrint_Click"   />

            
< Canvas  name ="canvas" >
                
< Image  name ="image"  WIDth ="300"  Height ="4000"  Source ="/Resource/logo.jpg"  Stretch ="Fill"   />
            
</ Canvas >

        
</ StackPanel >
    
</ GrID >
</ navigation:Page >

Print.xaml.cs

代码 /*
 * 演示 Silverlight 4.0 中新增的对打印的支持 
 * Printdocument - 用于提供打印功能的类
 *     Printdocument.PrintedPageCount - 已经被打印的页数
 *     Printdocument.Print(string documentname) - d出打印对话框。需要指定的参数为“在打印队列中需要显示的文档名称”
 *     Printdocument.BeginPrint - 调用 Print() 方法并且按了打印对话框中的打印按钮之后所触发的事件,在 PrintPage 事件之前发生
 *     Printdocument.EndPrint - 打印结束(包括打印被取消)后所触发的事件
 *     Printdocument.PrintPage - 每打印一页之前所触发的事件
 * PrintPageEventArgs - PrintPage 事件的事件参数
 *     PrintPageEventArgs.PageVisual - 需要被打印的 UIElement
 *     PrintPageEventArgs.PrintableArea - 可打印的区域大小(Size 类型,其包括 WIDth 属性和 Height 属性和 IsEmpty 属性)
 *     PrintPageEventArgs.Pagemargins - 获取当前打印页的页边距(Thickness 类型,其包括 left 属性和 top 属性和 Right 属性和 Bottom 属性)
 *     PrintPageEventArgs.HasMorePages - 设置是否还有更多页需要打印(如果设置为 true,则会继续出触发 PrintPage 事件)
 
*/

using  System;
using  System.Collections.Generic;
using  System.linq;
using  System.Net;
using  System.windows;
using  System.windows.Controls;
using  System.windows.documents;
using  System.windows.input;
using  System.windows.Media;
using  System.windows.Media.Animation;
using  System.windows.Shapes;
using  System.windows.Navigation;

using  System.windows.Printing;

namespace  Silverlight40.Other
{
    
public   partial   class  Print : Page
    {
        Printdocument _printdocument;
        
double  _offsetY  =  0d;
        
double  _totalHeight  =  0d;

        
public  Print()
        {
            InitializeComponent();
        }

        
private   voID  btnPrint_Click( object  sender, RoutedEventArgs e)
        {
            _totalHeight 
=  image.ActualHeight;

            _printdocument.Print(
" 打印队列中显示的文档名称 " );
        }

        
protected   overrIDe   voID  OnNavigatedTo(NavigationEventArgs e)
        {
            _printdocument 
=   new  Printdocument();
            _printdocument.PrintPage 
+=   new  EventHandler < PrintPageEventArgs > (_printdocument_PrintPage);
            _printdocument.BeginPrint 
+=   new  EventHandler < BeginPrintEventArgs > (_printdocument_BeginPrint);
            _printdocument.EndPrint 
+=   new  EventHandler < EndPrintEventArgs > (_printdocument_EndPrint);
        }

        
voID  _printdocument_PrintPage( object  sender, PrintPageEventArgs e)
        {
            e.PageVisual 
=  canvas;

            
//  如果需要打印的 UIElement 超过了 PrintableArea,则超过的部分在打印的时候都会被剪裁。所以如果需要打印多页的话,必须对被打印的 UIElement 所显示的内容做手工调整,使当前需要被打印的内容出现在 PrintableArea 中
            Canvas.Settop(image,  - _offsetY); 
            _offsetY 
+=  e.PrintableArea.Height; 
            e.HasMorePages 
=  _offsetY  <=  _totalHeight;

            lblMsg.Text 
+=   " 正在打印:第 "   +  (_printdocument.PrintedPageCount  +   1 ).ToString()  +   " 页\n " ;
            lblMsg.Text 
+=   string .Format( " 当前打印的页边距:左{0},上{1},右{2},下{3}\n " , e.Pagemargins.left, e.Pagemargins.top, e.Pagemargins.Right, e.Pagemargins.Bottom);
            lblMsg.Text 
+=   " 可打印区域的宽和高: "   +  e.PrintableArea.WIDth.ToString()  +   " × "   +  e.PrintableArea.Height.ToString()  +   " \n " ;
        }

        
voID  _printdocument_BeginPrint( object  sender, BeginPrintEventArgs e)
        {
            lblMsg.Text 
+=   " 开始打印\n " ;
        }

        
voID  _printdocument_EndPrint( object  sender, EndPrintEventArgs e)
        {
            Canvas.Settop(image, 
0 );

            
//  EndPrintEventArgs.Error - 如果在打印过程中发生异常,则返回该异常
             if  (e.Error  ==   null )
                lblMsg.Text 
+=   " 打印结束\n " ;
            
else
                lblMsg.Text 
+=   " 打印出错: "   +  e.Error.ToString()  +   " \n " ;
        }

    }
}

2、演示动态绑定的应用
DynamicBinding.xaml.cs

代码 /*
 * 演示如何通过类型为 dynamic 的对象动态绑定到 HTML DOM 元素以及如何通过动态绑定调用 JavaScript
 * 使用 dynamic 之前,要先引用 Microsoft.CSharp.dll 程序集
 * 
 * 在 Silverlight40TestPage.HTML 页上运行程序,以查看本 Demo 的演示效果
 
*/

using  System;
using  System.Collections.Generic;
using  System.linq;
using  System.Net;
using  System.windows;
using  System.windows.Controls;
using  System.windows.documents;
using  System.windows.input;
using  System.windows.Media;
using  System.windows.Media.Animation;
using  System.windows.Shapes;
using  System.windows.Navigation;

using  System.windows.browser;

namespace  Silverlight40.Other
{
    
public   partial   class  DynamicBinding : Page
    {
        
public  DynamicBinding()
        {
            InitializeComponent();
        }

        
protected   overrIDe   voID  OnNavigatedTo(NavigationEventArgs e)
        {
            DOMDemo();

            JavaScriptDemo();
        }

        
private   voID  DOMDemo()
        {
            
//  声明 HTML DOM 中的 document 为一个 dynamic 类型的对象。也就是说可以把这里的 document 对象看作是 HTML DOM document 对象来编程
            
//  HTMLdocument继承自HTMLObject,HTMLObject继承自ScriptObject,ScriptObject 实现了 IDynamicMetaObjectProvIDer 接口,所以支持动态绑定
            dynamic document  =  HTMLPage.document;
            
//  获取页面上的一个名为“hello”的 div 中的内容,只需要用 HTML DOM 的编程方式即可
             string  s  =  document.getElementByID( " hello " ).INNERHTML;
            MessageBox.Show(s);
        }

        
private   voID  JavaScriptDemo()
        {
            
//  获取浏览器内的 window 对象
            dynamic window  =  HTMLPage.Window;

            
//  调用 JavaScript
            window.alert( " Hello: webabcd " );
        }
    }
}

相关的 DOM 部分
Silverlight40TestPage.HTML
     < div  style ="Font-size: 12px; text-align: left"  ID ="hello" >
        I am a div
    
</ div >
3、介绍导航系统的增强
NavigationEnhancement.xaml

代码 < navigation:Page  x:Class ="Silverlight40.Other.NavigationEnhancement"  
           xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
           xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"  
           xmlns:d
="http://schemas.microsoft.com/Expression/blend/2008"
           xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
           xmlns:navigation
="clr-namespace:System.windows.Controls;assembly=System.windows.Controls.Navigation"
           Title
="NavigationEnhancement Page" >
    
< GrID  x:name ="LayoutRoot" >
        
< StackPanel  HorizontalAlignment ="left" >

            
< Hyperlinkbutton  margin ="5"  NavigateUri ="http://www.cnblogs.com/webabcd/archive/2009/08/10/1542663.HTML"  Targetname ="_blank"  Content ="Silverlight 3.0 中的导航系统的基本功能的演示"   />

            
< TextBlock  Text ="Frame 和 NavigationService 新增了 Refresh() 方法"  margin ="5"   />

            
< TextBlock  margin ="5" >
                
< Run > Frame 的 ContentLoader 属性默认是 PageResourceContentLoader 类型的对象 </ Run >
                
< lineBreak  />
                
< Run > 如果需要自定义导系统,那么需要实现 INavigationContentLoader 接口,然后将 Frame 的 ContentLoader 属性设置为实现了该接口的类的实例即可 </ Run >
            
</ TextBlock >
            
        
</ StackPanel >
    
</ GrID >
</ navigation:Page >

4、杂七杂八
Summary.xaml.cs

代码 using  System;
using  System.Collections.Generic;
using  System.linq;
using  System.Net;
using  System.windows;
using  System.windows.Controls;
using  System.windows.documents;
using  System.windows.input;
using  System.windows.Media;
using  System.windows.Media.Animation;
using  System.windows.Shapes;
using  System.windows.Navigation;

namespace  Silverlight40.Other
{
    
public   partial   class  Summary : Page
    {
        
public  Summary()
        {
            InitializeComponent();
        }

        
protected   overrIDe   voID  OnNavigatedTo(NavigationEventArgs e)
        {
            IsNullOrWhiteSpaceDemo();
            ConcatandJoinDemo();
            TupleDemo();
            HasFlagDemo();
        }

        
//  String.IsNullOrWhiteSpace()  - 判断字符串是否是 null,是否是空字符串,是否是空白字符
         private   voID  IsNullOrWhiteSpaceDemo()
        {
            lblMsg.Text 
+=   string .Format( " null: {0}, \ " \ " : {1}, \ "  \ " : {2}, \ "    \ " : {3} " ,
               
string .IsNullOrWhiteSpace( null ).ToString(),  //  true
                string .IsNullOrWhiteSpace( "" ).ToString(),  //  true
                string .IsNullOrWhiteSpace( "   " ).ToString(),  //  true
                string .IsNullOrWhiteSpace( "     " ).ToString());  //  true
            lblMsg.Text  +=   " \n " ;
            
            
//  运行结果:
            
//  null: True, "": True, " ": True, "   ": True
        }

        
//  String.Concat() 和 String.Join() - 增加了对 IEnumerable<T> 类型的支持
         private   voID  ConcatandJoinDemo()
        {
            List
< int >  List  =   new  List < int > ();
            
for  ( int  i  =   0 ; i  <   10 ; i ++ )
            {
                List.Add(i);
            }

            lblMsg.Text 
+=   string .Concat(List);
            lblMsg.Text 
+=   "   " ;
            lblMsg.Text 
+=   string .Join( " , " , List);
            lblMsg.Text 
+=   " \n " ;

            
//  运行结果:
            
//  0123456789 0,1,2,3,4,5,6,7,8,9
        }

        
//  Tuple(元组)的 Demo
         private   voID  TupleDemo()
        {
            var tuple 
=  Tuple.Create( 1 " s " , DateTime.Now);
            lblMsg.Text 
+=   string .Format( " {0}, {1}, {2} " ,
              tuple.Item1.ToString(),
              tuple.Item2.ToString(),
              tuple.Item3.ToString());
            lblMsg.Text 
+=   " \n " ;

            
//  运行结果:
            
//  1, s, 2010/8/30 8:37:12
        }

        
//  演示对 [Flags] 枚举的支持
         private   voID  HasFlagDemo()
        {
            FlagsEnum e1 
=  FlagsEnum.B  |  FlagsEnum.D;
            FlagsEnum e2 
=  FlagsEnum.All;

            lblMsg.Text 
+=   string .Format( " {0},
               e1.HasFlag(FlagsEnum.B).ToString(),
               e1.HasFlag(FlagsEnum.D).ToString(),
               e2.HasFlag(FlagsEnum.F).ToString());
            lblMsg.Text 
+=   " \n " ;

            
//  运行结果:
            
//  True, True, True
        }
    }

    [Flags]
    
public   enum  FlagsEnum
    {
        A 
=   0 ,
        B 
=   1 ,
        C 
=   2 ,
        D 
=   4 ,
        E 
=   8 ,
        F 
=   16 ,
        All 
=   0   |   1   |   2   |   4   |   8   |   16
    }
}

OK
[源码下载] 总结

以上是内存溢出为你收集整理的稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八全部内容,希望文章能够帮你解决稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1071656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存