Poszukuję dobrego, czystego sposobu na umożliwienie kopiowania tekstu z richtextbox wyświetlając emotikony. Pomyśl o Skype, w którym możesz wybrać czat, który skopiuje obrazy emotikonów i przekonwertuje je na ich reprezentacje tekstowe (obraz buźki na :) itp.). Używam wzorca MVVM.Kopiowanie emotikonów "tekst" z richtextbox pokazując obraz w wpf
5
A
Odpowiedz
4
Nie wiem, jak skonfigurować parsowanie treści RichTextBox na tekst. Poniżej znajduje się jeden sposób, który używa xml linq. Wyrażenia regularne mogą działać lepiej, ale ssam je. Przekaż metodę ConvertToText do FLowDocument twojego 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
Doskonała robota! –
+0
Dzięki, Frank, to był fajny problem, po prostu musiałem się zdecydować. –
Powiązane problemy
- 1. PHP tekst do emotikonów
- 2. Zestaw RTF tekst do kontroli WPF RichTextBox
- 3. Jak przesłonić kopiowanie i wklejać w richtextbox
- 4. WPF: Kopiowanie z DataGrid
- 5. Kopiowanie tekstu wraz z jego formatowaniem z RichTextBox
- 6. Jak wyczyścić RichTextBox WPF?
- 7. WPF RichTextBox Znaczenie podświetlania składni
- 8. C# RichTextBox Wybierz określony tekst
- 9. C# Wiersz WPF i kolumna z RichTextBox
- 10. Konfliktowe ustawienia językowe WPF richtextbox
- 11. RichTextBox (WPF) nie ma właściwości String "Text"
- 12. Pasteboard - kopiowanie (obraz + tekst) tworzy tajemnicę \ n line break
- 13. UITextView z edycją emotikonów
- 14. C#/WPF: Wyłącz zawijanie tekstu w RichTextBox
- 15. Jak korzystać z wielu kolorów w richtextbox
- 16. Wybierz zakres tekstu w RichTextBox WPF (FlowDocument) Programowo
- 17. Resetuj RTF w RichTextBox?
- 18. Mecz unicode emotikonów w python regex
- 19. Jak wybrać tekst RichTextBox, biorąc pod uwagę indeks i długość
- 20. niedopasowanie między RichTextBox i Word
- 21. Jak uzyskać RTF z RichTextBox
- 22. Tło CSS obraz nie pokazując w IE7 tylko
- 23. Klikanie HyperLinks w RichTextBox bez przytrzymywania CTRL - WPF
- 24. Obraz WPF do bajtu []
- 25. RichTextBox w WPF nie ma właściwości jako .Lines?
- 26. Obraz plasterka wpf
- 27. Zmiana czcionki tekstu w RichTextBox
- 28. dialogowe akcji Google Plus pokazując zły obraz, używając OpenGraph metatagów
- 29. WPF z danymi Label Design Czas Tekst
- 30. C# Problem wyboru RichTextBox
Czy rozważałeś rozpoczęcie bounty? –