Согласно clipboard documentation здесь
В режиме частичного доверия (режим по умолчанию для браузера организовано Silverlight-приложений), Silverlight также ограничивает буфер обмена доступа к его двум ключевым API-интерфейсам GetText и SetText. Эти API могут быть только , вызванные из контекста, который определяется средой Silverlight , чтобы быть в ответ на инициированное пользователем действие. Например, доступ к буферам обмена действителен из обработчика события Click или KeyDown . Напротив, доступ к буферу недействителен из обработчика для Загружен или из конструктора, и попытки доступа исключают исключения.
Кроме того, Silverlight запрашивает подтверждение пользователя, если к буферу осуществляется доступ под частным доверием. Это диалоговое окно подтверждения доступа Silverlight отображается один раз за сеанс. Если вы специально создаете приложение, отличное от браузера, и запрашиваете повышенное доверие, это ограничение безопасности для API и его диалоговое окно не используются.
Это заявленное решение для этого ограничения.
Когда данные возвращаются из службы, они должны храниться в переменной, а пользователю предоставляется кнопка для щелчка, где данные будут скопированы в буфер обмена.
string data = "";
...
void LoadDataAsync() {
//Service call populates variable.
//When service call completes Button is enabled allowing user to click
}
...
private void OnButtonClick(object sender, System.Windows.RoutedEventArgs e) {
System.Windows.Clipboard.SetText(data);
}
Вы можете представить пользователю диалоговое окно, когда служба завершает уведомления пользователя о том, завершения загрузки и попросить идентификатор они хотят, чтобы скопировать данные в буфер обмена. Это даст вам инициированное пользователем действие, необходимое для работы буфера обмена.