Как я могу позволить пользователю копировать произвольный текст? - PullRequest
0 голосов
/ 19 июля 2011

У меня есть приложение, в котором я генерирую текст (около 500 символов), и я бы хотел, чтобы у пользователя были некоторые средства для копирования этого текста для использования вне приложения.

Я не хочу использовать какие-либо возможности для этого приложения (например, Интернет или контакты).

Вот что я пробовал (и почему это не удалось)

  • TextBox. IsReadOnly = true; Выбрать все();
    • Невозможно выбрать все текстовое поле только для чтения
  • Отключить только чтение, скрыть SIP
    • Невозможно скрыть SIP в TextBox (не только для чтения), с которым взаимодействует пользователь (я хочу разрешить пользователю копировать, поэтому необходимо взаимодействовать с элементом управления)
  • разрешить редактирование, показать глоток, SelectAll ()
    • Значок «Копировать» не появляется, если пользователь не выбрал текст
  • При выборе изменилось (фактически изменилось), SelectAll ()
    • Значок «Копировать» не появляется, если пользователь не выбрал текст? Значок копирования отображается с ошибками, я бы не назвал его приемлемым для пользователя.

Итак, на данный момент я довольно далек от того, чего хочу от работы с пользователем, и у меня все еще нет ничего, что работает. Есть предложения?

Некоторые другие возможные ответы на мой вопрос:

  • «Как заставить кнопку копирования появляться над текстом, который я выбрал программно?»
  • «Как изменить поведение выбора касания в текстовом поле?»

Ответы [ 3 ]

0 голосов
/ 19 июля 2011

Попробуйте изменить текстовое поле в соответствии с http://mobileworld.appamundi.com/blogs/peterfoot/archive/2011/02/08/copyable-textblock-for-windows-phone.aspx

0 голосов
/ 21 июля 2011

Вот то, что я в итоге получил, работая в основном

    private void Export(StackPanel stacker)
    {
        var exportHeader = new TextBlock();
        exportHeader.Text = "Export";
        stacker.Children.Add(exportHeader);
        var exportBox = new TextBox();
        stacker.Children.Add(exportBox);
        //exportBox.IsReadOnly = true; // hides SIP, but causes an exception with SelectAll() (pre-Mango, I haven't tried on Mango yet)
        exportBox.FontSize = 1;
        exportBox.Text = textToExport;
        exportBox.GotFocus += new System.Windows.RoutedEventHandler((send, ev) =>
        {
            ((TextBox)send).SelectAll();
        });
        exportBox.Focus();
    }

Очевидно, что размер шрифта 1 имеет значение, может быть потому, что весь текст может появиться на экране одновременно?Кто знает.

Я принял этот ответ, потому что никто больше не опубликовал лучшее решение.Буду признателен за лучшее решение.Если вы можете заставить SIP уйти, это было бы здорово.

0 голосов
/ 19 июля 2011

На данный момент существуют некоторые ограничения для буфера обмена Windows Phone 7:

  • Работает только в TextBox и может копировать текст только по желанию пользователя
  • Текст сохраняется только до блокировки устройства. Если ваше устройство заблокировано, буфер обмена будет очищен

Даже если вы попробуете Clipboard.SetText Method , вы заметите исключение SecurityException, если вызовете этот метод без взаимодействия с пользователем. Это позволяет контролировать данные пользователей, чтобы ни одно мошенническое приложение не могло копировать нераспознанный текст.

Но вы можете попробовать Мэтта Лэйси WP7Clipboard . Он сохраняет содержимое буфера обмена внутри изображения и даже может копировать растровые изображения.

...