Блог Сергея Байдачного

Мой блог о технологиях

Введение в SilverLight 4: Работа с буфером обмена

with one comment

Следующая возможность позволяет получить доступ к буферу обмена. Пока речь идет только о работе с текстом, но в будущем (возможно к релизу), эта функциональность будет расширена, и пользователь сможет вставлять и копировать также и изображения.

Механизм работы с буфером реализован в двух вариантах:

· Копирование и вставка текста с помощью горячих клавишь (Ctrl+C, Ctrl+V) при работе с такими элементами как TextBox, RichTextBox и т. д. Как реализован этот механизм и как воссоздать его в своем элементе управления – пока остается загадкой. Ведь Ctrl+C, Ctrl+V работают тут без каких-либо разрешений от пользователя, то есть работают всегда, в отличии от второго механизма;

· Доступ к буферу обмена с помощью статического класса Clipboard, содержащего три статических метода:

· ContainsText – проверяет наличие текста в буфере обмена;

· GetText – позволяет получить текст из буфера обмена;

· SetText – сохраняет текст в буфере обмена.

Данный класс можно использовать только в ответ на событие инициированное пользователем, например, нажатие кнопки. При этом пользователь получит сообщение о том, что приложение пытается получить доступ к буферу обмена, и сможет заблокировать или предоставить доступ. Если пользователь блокирует доступ к буферу, то генерируется исключение SecurityException. Что интересно, если пользователь блокирует доступ при первой попытке, то исключение будет генерироваться всякий раз при попытке вызвать методы класса Clipboard, но сообщение пользователь видеть уже не будет. Механизма отобразить пользователю сообщение еще раз я не нашел. Еще одна загадка данной функциональности.

Реализуем простой пример, содержащий поле редактирования и две кнопки:

MainPage.xaml

<UserControl x:Class="Clipboard_Chapter0.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
> 
    <StackPanel x:Name="LayoutRoot" Background="White">
        <TextBox Height="92" Name="textBox1" Width="339" 
         AcceptsReturn="True" 
         HorizontalScrollBarVisibility="Auto" />
        <Button Content="Copy" Height="23" 
         Name="copyButton" Width="75" 
         Click="copy_Click" />
        <Button Content="Past" Height="23" 
         Name="pasteButton" Width="75" Click="past_Click" />
    </StackPanel>
</UserControl>

MainPage.xaml.cs

using System;
using System.Windows;
using System.Windows.Controls;
using System.Security;
 
namespace Clipboard_Chapter0
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }
 
        private void past_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (Clipboard.ContainsText())
                    textBox1.Text = Clipboard.GetText();
            }
            catch (SecurityException ex)
            {
                textBox1.Text = "You didn't grant permissions!";
            }
        }
 
        private void copy_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Clipboard.SetText(textBox1.Text);
            }
            catch (SecurityException ex)
            {
                textBox1.Text = "You didn't grant permissions!";
            }
        }
    }
}
Реклама

Written by Sergiy Baydachnyy

05.01.2010 в 12:50

Опубликовано в SilverLight

Tagged with

Один ответ

Subscribe to comments with RSS.

  1. это работает, если стартовый URL — localhost…, если задать имя сервера, то ничего не спрашивается, просто выдается сообщение, что доступ к буферу обмена запрещен.
    Как тут быть?

    Татьяна

    07.05.2015 at 13:39


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: