【萬裡征程——Windows App開發】如何使用粘貼板

來源:互聯網
上載者:User

標籤: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開發】如何使用粘貼板

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.