出于安全因素的考虑,Silverlight应用程序并不能过多的访问本地资源,比如说它只有openFileDialog而没有saveFileDialog,另外SilverLight也不能直接操作Windows剪切板。
在我们设计Form程序的时候,时常要用到剪切板资源,在.net下,只要操作System.Windows.ClipBoard类下的各个静态方法就能过实现我们的需求。但是SilverLight程序集作为WPF的一个子集,并没有ClipBoard这个类。但是如果我们想在SilverLight中访问剪切板资源的话,就要另辟蹊径。由于SilverLight中有与asp.net以及HTML DOM交互的机制,因此我们大可以通过这种途径来实现SilverLight访问剪切板的目的。
在HTML和aspx文件(调用SilverLight程序xap的载体)中,添加这段js代码,然后改写app.xaml.cs文件如下:
同时,在Page.xaml.cs文件中加入相应的代码:
这样,每当Page.xaml.cs中的CopyToClipBoard()方法被调用,abcdefg这个字符串就会被复制到剪切板。
PS:上面那段[ScriptableMember()]其实我没有调用过它,只是SilverLight要求在与js的交互中提供给js调用的接口而已,不写的话编译是通不过的。
PS:在Vista中运行的话,系统会提示是否同意访问剪切板,这是Vista的问题,并不是这段代码的错。