使用粘貼板

2018-08-12 21:55 更新

使用粘貼板

記得智能手機(jī)剛出來那會比較火的一個(gè)概念“能夠復(fù)制粘貼的手機(jī)就是智能手機(jī)”?,F(xiàn)在看來,這不過是個(gè)老掉牙的功能了,但實(shí)際用處卻是非常強(qiáng)大的,那么現(xiàn)在我們就來試試怎么做到這個(gè)功能。

粘貼板的英文名叫做 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>

在后臺代碼中寫上這么一個(gè)方法:

        void Clipboard_ContentChanged(object sender, object e)
        {
            DataPackageView pv = Clipboard.GetContent();
            if (pv.Contains(StandardDataFormats.Text))
            {
                btnClip.IsEnabled = true;
            }               
        }

StandardDataFormats 是標(biāo)準(zhǔn)數(shù)據(jù)格式,這里判斷它是否是 Text,如果是的話則讓前面的 Button 按鈕可用(之前設(shè)為不可用,以灰色顯示)。

標(biāo)準(zhǔn)數(shù)據(jù)格式有 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 對象數(shù)據(jù);類似的還有 SetContent(),用于把數(shù)據(jù)存入剪切板中。還有 Clear 事件來清空剪切板,F(xiàn)lush 事件把數(shù)據(jù)從源寫入到剪切板,并且在應(yīng)用程序退出后依然保留在剪切板中。還有 ContentChanged 事件在剪切板中存儲的數(shù)據(jù)內(nèi)容發(fā)生變化時(shí)自動激活以達(dá)到監(jiān)聽剪切板內(nèi)容變化的效果。

        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;
            }               
        }

大家可以試試,已經(jīng)完成了,但我們可以做的更多,不是嗎?

完整的代碼如下:

<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;
            }
        }
    }

現(xiàn)在它還可以復(fù)制圖片了哦~

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號