все. В моем проекте есть ContentControl, который связан со свойством, которое возвращает строку с синтаксисом HTML.
Контроль XAML
<ContentControl Height="48"
Margin="100,56,223,0"
VerticalAlignment="Top"
Content="{Binding HitContext,
Converter={StaticResource FormatConverter},
Mode=TwoWay}"
Foreground="White" />
Вы заметите, что у меня есть свойство Converter для этого элемента управления. По сути, я оцениваю строку при ее возврате, вычеркиваю html и заменяю ее xaml, чтобы выделить ключевые слова в возвращаемом.
Вот код конвертера формата:
public class HighlightConverter : IValueConverter
{
///<summary>
///Converter class used to evaluate and highlight context string results
///</summary>
///
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string str = value.ToString();
str = str.Replace("&", "&");
str = str.Replace("<fragment>", " ");
str = str.Replace("</fragment>", " ");
str = str.Replace("<hilight>", "<Run Foreground=\"Gold\" FontWeight=\"ExtraBold\" FontSize=\"13\">");
str = str.Replace("</hilight>", "</Run>");
return XamlReader.Load("<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" TextWrapping=\"Wrap\" >" + str + "</TextBlock>");
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Пока это работает нормально. Строка отображается в представлении, а слова, имеющие теги "hilight", преобразуются для отображения выделенного слова в элементе управления в виде синтаксиса xaml. Вы также можете увидеть другие очистки, такие как удаление фрагмента тега и амперсанда.
Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно иметь возможность выбирать текст из элемента управления во время выполнения. Хотя TextBox обычно используется, когда вам нужно выбрать текст из пользовательского интерфейса, он не поддерживает класс Run, поэтому я не могу передать форматирование выделения в UIelement. Я также пытался использовать RichTextBox, но получил сообщение об ошибке разбора xaml, в котором говорится, что элемент управления не может быть создан.
Я видел одну ссылку на stackoverflow и silvelright.net с похожей проблемой, которую пользователь предложил применить стиль к текстовому блоку. Однако, поскольку это отображается в ContentControl, стиль не может быть установлен.
До сих пор я пытался использовать ViewScroller, Textbox и RichTextBox, которые все потерпели неудачу из-за ошибок синтаксического анализа при рендеринге.
Я даже не уверен, выполнимо ли это, учитывая, что я выделяю текст, и мне тоже нужно его выделить. Я бы приветствовал любые предложения или идеи.
Спасибо,