稳扎稳打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其它之打印, 动态绑定, 增强的导航系统, 杂七杂八所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)