【万里征程——Windows App开发】如何使用粘贴板
来源:互联网 发布:手机自动刷新软件 编辑:程序博客网 时间:2024/06/05 03:21
记得智能手机刚出来那会比较火的一个概念“能够复制粘贴的手机就是智能手机”。现在看来,这不过是个老掉牙的功能了,但实际用处却是非常强大的,那么现在我们就来试试怎么做到这个功能。
粘贴板的英文名叫做Clipboard,这也是它的类名了。
新建工程这种就不说了,在XAML中代码如下:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Grid Margin="12" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="500"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Button Grid.Row="0" Name="btnClip" Margin="0,3,0,16" Content="粘贴" FontSize="32" Click="btnClip_Click" IsEnabled="False"/> <ScrollViewer Name="scrollView" Grid.Row="1" Visibility="Collapsed"> <TextBlock Margin="12" Name="tBlockClipboard" FontSize="35" Foreground="Gainsboro" TextWrapping="Wrap" /> </ScrollViewer> </Grid> </Grid>
在后台代码中写上这么一个方法:
void Clipboard_ContentChanged(object sender, object e) { DataPackageView pv = Clipboard.GetContent(); if (pv.Contains(StandardDataFormats.Text)) { btnClip.IsEnabled = true; } }
StandardDataFormats是标准数据格式,这里判断它是否是Text,如果是的话则让前面的Button按钮可用(之前设为不可用,以灰色显示)。
标准数据格式有Bitmap,HTML,RTF,StorageItems,Text,Uri等。
然后在按钮的Click事件中写如下代码:
private async void btnClip_Click(object sender, RoutedEventArgs e) { var txt = await Clipboard.GetContent().GetTextAsync(); tBlockClipboard.Text = txt; }
这里我们使用了Clipboard类的GetContent()方法,用于在剪切板中取出DataPackageView对象数据;类似的还有SetContent(),用于把数据存入剪切板中。还有Clear事件来清空剪切板,Flush事件把数据从源写入到剪切板,并且在应用程序退出后依然保留在剪切板中。还有ContentChanged事件在剪切板中存储的数据内容发生变化时自动激活以达到监听剪切板内容变化的效果。
protected override void OnNavigatedTo(NavigationEventArgs e) { Clipboard.ContentChanged += Clipboard_ContentChanged; } protected override void OnNavigatedFrom(NavigationEventArgs e) { Clipboard.ContentChanged -= Clipboard_ContentChanged; } void Clipboard_ContentChanged(object sender, object e) { DataPackageView pv = Clipboard.GetContent(); if (pv.Contains(StandardDataFormats.Text)||pv.Contains(StandardDataFormats.Bitmap)) { btnClip.IsEnabled = true; } }
大家可以试试,已经完成了,但我们可以做的更多,不是吗?
完整的代码如下:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Grid Margin="12" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="500"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Button Grid.Row="0" Name="btnClip" Margin="0,3,0,16" Content="粘贴" FontSize="32" Click="btnClip_Click" IsEnabled="False"/> <ScrollViewer Name="scrollView" Grid.Row="1" Visibility="Collapsed"> <TextBlock Margin="12" Name="tBlockClipboard" FontSize="35" Foreground="Gainsboro" TextWrapping="Wrap" /> </ScrollViewer> <Image x:Name="imgClicpboard" Grid.Row="1" Margin="5" Stretch="Uniform" Visibility="Collapsed"/> </Grid> </Grid>
public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { Clipboard.ContentChanged += Clipboard_ContentChanged; } protected override void OnNavigatedFrom(NavigationEventArgs e) { Clipboard.ContentChanged -= Clipboard_ContentChanged; } void Clipboard_ContentChanged(object sender, object e) { DataPackageView pv = Clipboard.GetContent(); if (pv.Contains(StandardDataFormats.Text)||pv.Contains(StandardDataFormats.Bitmap)) { btnClip.IsEnabled = true; } } private async void btnClip_Click(object sender, RoutedEventArgs e) { scrollView.Visibility = Visibility.Collapsed; imgClicpboard.Visibility = Visibility.Collapsed; tBlockClipboard.Text = " "; imgClicpboard.Source = null; DataPackageView pv = Clipboard.GetContent(); if (pv.Contains(StandardDataFormats.Text)) { scrollView.Visibility = Visibility; var txt = await Clipboard.GetContent().GetTextAsync(); tBlockClipboard.Text = txt; } else if(pv.Contains(StandardDataFormats.Bitmap)) { imgClicpboard.Visibility = Visibility; var bmp = await Clipboard.GetContent().GetBitmapAsync(); Windows.UI.Xaml.Media.Imaging.BitmapImage bitMap = new Windows.UI.Xaml.Media.Imaging.BitmapImage(); bitMap.SetSource(await bmp.OpenReadAsync()); this.imgClicpboard.Source = bitMap; } } }
现在它还可以复制图片了哦~
感谢您的访问,希望对您有所帮助。 欢迎大家关注、收藏以及评论。
为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp
6 1
- 【万里征程——Windows App开发】如何使用粘贴板
- 【万里征程——Windows App开发】开发准备
- 【万里征程——Windows App开发】动画1
- 【万里征程——Windows App开发】绘制图形
- 【万里征程——Windows App开发】应用栏
- 【万里征程——Windows App开发】DatePicker&Timepicker
- 【万里征程——Windows App开发】补充:JSON
- 【万里征程——Windows App开发】如何保存、读取、删除应用数据
- 【万里征程——Windows App开发】使用华丽丽的字体
- 【万里征程——Windows App开发】使用Toast通知
- 【万里征程——Windows App开发】DatePickerFlyout、TimePickerFlyout的使用
- 【万里征程——Windows App开发】如何在多个页面间读取/保存文件【草稿】
- 【万里征程——Windows App开发】文件&数据——读取文件/文件夹名
- 【万里征程——Windows App开发】文件&数据——文件选取器
- 【万里征程——Windows App开发】文件&数据——写入与读取
- 【万里征程——Windows App开发】文件&数据——获取文件属性
- 【万里征程——Windows App开发】页面布局和基本导航
- 【万里征程——Windows App开发】控件大集合1
- hdoj1814 Peaceful Commission【2-set】
- 二进制到十六进制转换程序
- ant的文件相关操作
- 第九周项目二 Time类中的运算符重载(续)(2)定义Time类的>>和<<
- 大连交大iptv
- 【万里征程——Windows App开发】如何使用粘贴板
- 不同profile之间EJB调用问题javax.naming.NameNotFoundException
- hello, world!
- 第十一周阅读程序二
- sass语法
- Struts2 - 上传任意多个文件
- 黑马程序员---Objective-C 成员变量的作用域
- 人工智能
- Java学习笔记 - 搭建开发环境