Je cherche un bon moyen de copier du texte à partir d'une riche zone de texte affichant des émoticônes. Pensez à skype, où vous pouvez sélectionner une discussion et il copiera les images d'émoticônes et les convertira en leurs représentations textuelles (image de smiley à :) etc). J'utilise le pattern MVVM.Copie d'un "texte" d'émoticône à partir d'une riche zone de texte montrant l'image dans wpf
5
A
Répondre
4
Je ne connais pas un moyen de configurer l'analyse du contenu RichTextBox en texte. Ci-dessous est un moyen qui utilise xml linq. Les expressions régulières pourraient mieux fonctionner mais je les suce. Passez la méthode ConvertToText au fichier FLowDocument de votre 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
Excellent travail! –
+0
Merci Frank, c'était un problème cool que je devais juste essayer. –
Questions connexes
- 1. Comment lier un lien hypertexte WPF dans une zone de texte riche à une commande?
- 2. Chargement d'un fichier html dans une zone de texte riche
- 3. Visual C++ contenu zone de texte copie
- 4. Zone de texte riche arrondi sélection de coin arrondi
- 5. WPF CommandParameter dans la zone de texte
- 6. DataBind à une zone de texte dans WPF
- 7. Texte riche en gtk-sharp?
- 8. wpf: Mousedoubleclick pour la zone de texte
- 9. Validation dans la zone de texte dans WPF
- 10. Winforms zone de texte autoheight
- 11. Formatage de zone de texte
- 12. .NET remplissage StreamReader à partir de la zone de texte
- 13. Définir le focus dans la zone de texte WPF
- 14. Comment imprimer une valeur dans la zone de texte à partir du fichier texte?
- 15. Zone de texte saisie semi-automatique dans WPF
- 16. Remplir une zone de texte à partir d'un fichier
- 17. Obtention du texte à partir d'une zone de liste déroulante
- 18. Texte de zone de texte à fractionner avec les conditions
- 19. WPF: comment capturer le texte sélectionné dans une zone de texte incorporée dans ListView
- 20. Comment lire la zone de texte. Valeur de texte d'un autre thread dans WPF?
- 21. Surligner du texte à l'intérieur d'une zone de texte
- 22. Nouvelle zone de texte
- 23. Zone de texte HTMl
- 24. zone de texte enrichi savefile
- 25. wpf/silverlight conception de filtre de zone de texte
- 26. Composant de recherche pour la zone de texte WPF
- 27. définir un texte de zone de texte égal au texte de la zone de texte sur un formulaire différent?
- 28. Obtenir du texte brut à partir du texte démarqué
- 29. WPF zone de texte et bordures - comportement Redimensionnement curieux
- 30. Mesure de texte dans WPF
Avez-vous envisagé de commencer une prime à ce sujet? –