2016-08-21 3 views
0

У меня есть текстовое поле в приложении Windows 10 UWP, которое выглядит следующим образом.Как вставить значение при копировании форматированного текста в TextBox

<TextBox Name="QuoteBox" 
        MinHeight="160" 
        TextAlignment="Left" 
        TextWrapping="Wrap" 
        Margin="12" 
        RelativePanel.AlignTopWithPanel="True" 
        RelativePanel.AlignRightWithPanel="True" 
        RelativePanel.AlignLeftWithPanel="True" 
        IsTabStop="True" KeyDown="InputBox_KeyDown" 
        Height="{x:Bind MainScrollViewer.ViewportHeight, Converter={StaticResource TwoFifthsConverter}, Mode=OneWay}" /> 

То, что я пытаюсь сделать, это скопировать/вставить текст в этом текстовом поле. Проблема в том, что когда я копирую текст с электронной почты, веб-сайта или даже OneNote, текст не вставлен.

Но когда я вставляю этот текст в Блокнот и копирую его оттуда в TextBox, он работает.

Я предполагаю, что это связано с тем, что текст содержит форматирование, а TextBox не поддерживает вставку текста форматирования.

Было много вопросов, подобных этому, но они касались очень конкретных решений и пользовательских обработчиков событий Paste.

Как вы можете вставлять текст из форматированного текста в TextBox? Нужен ли пользовательский обработчик событий Paste?

спасибо.

+0

не может воспроизвести проблему. Я могу скопировать форму Mail, Edge и OneNote и вставить в TextBox. Я предлагаю вам создать пустой проект с одним TextBox для повторного тестирования. –

+0

Это интересно, вы пробовали копировать форматированный текст в приложение Wunderlist UWP? У этого же вопроса. Однако удалось найти решение. –

ответ

0

Итак, я создал обработчик событий для события Paste. В основном то, что я сделал, это просто скопировать текст из буфера обмена в текстовое свойство Text.

Это упрощение примера находится в обработчике Paste событий documentation page

/// <summary> 
    /// Used to paste text when copying formatted text 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private async void QuoteBox_Paste(object sender, TextControlPasteEventArgs e) 
    { 
     TextBox quoteBox = sender as TextBox; 
     if (quoteBox != null) 
     { 
      // Mark the event as handled first. Otherwise, the 
      // default paste action will happen, then the custom paste 
      // action, and the user will see the text box content change. 
      e.Handled = true; 

      // Get content from the clipboard. 
      DataPackageView dataPackageView = Clipboard.GetContent(); 
      if(dataPackageView.Contains(StandardDataFormats.Text)) 
      { 
       try 
       { 
        // Copy text from the clipboard 
        quoteBox.Text = await dataPackageView.GetTextAsync(); 
       } 
       catch 
       { 
        // Ignore exception 
       } 
      } 
     } 
    } 
Смежные вопросы