Estoy buscando una forma buena y limpia de habilitar la copia de texto de un richtextbox que muestre emoticones. Piense en Skype, donde puede seleccionar un chat y copiará las imágenes emoticon y las convertirá a sus representaciones textuales (imagen sonriente a :), etc.). Estoy usando el patrón MVVM.Copiar el emoticon "texto" de un richtextbox que muestra la imagen en wpf
5
A
Respuesta
4
No conozco una forma de configurar el análisis del contenido de RichTextBox en texto. A continuación se muestra una forma que utiliza xml linq. Las expresiones regulares pueden funcionar mejor, pero las tomo mal. Pase el método ConvertToText al archivo FLowDocument de su RichTextBox.
private static string ConvertToText(FlowDocument flowDocument)
{
TextRange textRangeOriginal =
new TextRange(flowDocument.ContentStart, flowDocument.ContentEnd);
string xamlString;
using (MemoryStream memoryStreamOriginal = new MemoryStream())
{
textRangeOriginal.Save(memoryStreamOriginal, DataFormats.Xaml);
xamlString = ASCIIEncoding.Default.GetString(memoryStreamOriginal.ToArray());
}
XElement root = XElement.Parse(xamlString);
IEnumerable<XElement> smilies =
from element in root.Descendants()
where (string)element.Attribute("FontFamily") == "Wingdings" && IsSmiley(element.Value)
select element;
foreach (XElement element in smilies.ToList())
{
XElement textSmiley = new XElement(element.Name.Namespace + "Span",
new XElement(element.Name.Namespace + "Run", GetTextSmiley(element.Value)));
element.ReplaceWith(textSmiley);
}
using (MemoryStream memoryStreamChanged = new MemoryStream())
{
StreamWriter streamWriter = new StreamWriter(memoryStreamChanged);
streamWriter.Write(root.ToString(SaveOptions.DisableFormatting));
streamWriter.Flush();
FlowDocument flowDocumentChanged = new FlowDocument();
TextRange textRangeChanged =
new TextRange(flowDocument.ContentStart, flowDocument.ContentEnd);
textRangeChanged.Load(memoryStreamChanged, DataFormats.Xaml);
return textRangeChanged.Text;
}
}
private static string GetTextSmiley(string value)
{
switch (value)
{
case "J" :
return ":)";
case "K" :
return ":|";
case "L" :
return ":(";
default :
throw new ArgumentException();
}
}
private static bool IsSmiley(string value)
{
return value == "J" || value == "K" || value == "L";
}
+1
Excelente trabajo! –
+0
Gracias Frank, fue un problema genial que tuve que probar. –
Cuestiones relacionadas
- 1. WPF RichTextBox anexando texto de color
- 2. Cómo sobrescribir copiar y pegar en richtextbox
- 3. texto Conjunto RTF en el control RichTextBox WPF
- 4. WPF richTextBox pregunta
- 5. Muestra la imagen en un campo de texto DataGridViewImageColumn
- 6. WPF RichTextBox SelectionChanged Rendimiento
- 7. Copiar texto junto con su formateo desde un cuadro de texto RichTextBox
- 8. Desactivar la selección richtextbox wpf
- 9. C#/WPF: Deshabilitar ajuste del texto de RichTextBox
- 10. WPF RichTextBox sin ancho establecido
- 11. C# - ¿Cargando un archivo grande en un WPF RichTextBox?
- 12. Emoticon Reemplazo - PHP
- 13. Colorear texto selectivamente en RichTextBox
- 14. Enlace el texto de RichTextBox Xaml
- 15. Revisión ortográfica multilingüe en WPF richtextbox
- 16. Elementos de solo lectura ¿Ejecutar elementos en un WPF RichTextBox?
- 17. dispositivo iOS Retina no muestra la imagen 2X @, que muestra la imagen 1X
- 18. C# WPF convertir BitmapImage pegado en richtextbox en binario
- 19. C# RichTextBox Seleccione especificada texto
- 20. ¿Cómo puedo insertar una imagen en un RichTextBox?
- 21. Adición de texto en una nueva línea en WPF RichTextBox en tiempo de ejecución
- 22. ¿Cómo puedo hacer que un hipervínculo funcione en un RichTextBox?
- 23. ¿Cómo puedo copiar el contenido de WPF FlowDocument InlineUIContainer?
- 24. Cómo alinear texto en RichTextBox C#?
- 25. Serialización de WPF RichTextBox a XAML frente a RTF
- 26. Botón de imagen que muestra 'Enviar consulta' en la parte superior de la imagen en Firefox
- 27. Detener que un cuadro de texto WPF pierda el foco
- 28. RichTextBox y Word
- 29. ¿Cómo muevo el cursor una cierta cantidad de posiciones en un WPF RichTextBox?
- 30. Ruby muestra el progreso al copiar archivos
¿Has considerado comenzar una recompensa por esto? –