標籤:app開發 建立工程 background 代碼 grid
記得智能手機剛出來那會比較火的一個概念“能夠複製粘貼的手機就是智能手機”。現在看來,這不過是個老掉牙的功能了,但實際用處卻是非常強大的,那麼現在我們就來試試怎麼做到這個功能。
粘貼板的英文名叫做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
【萬裡征程——Windows App開發】如何使用粘貼板