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

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

Archive for Январь 5th, 2010

Введение в 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 at 12:50

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

Tagged with