Вы не можете связать (или мультибиндинг) с Document
свойством RichTextBox
, потому что это НЕ DependencyProperty
(странно !!!) !!! См. эту ссылку для действительно простого способа создания подкласса RichTextBox
для создания собственного BindableRichTextBox
или этого сообщения для другого обходного пути .
Теперь вы можете использовать MultiBinding
с пользовательским IMultiValueConverter
для достижения результатов. Поскольку вы не предоставили подробных сведений о своей проблеме, я могу лишь дать вам общее представление о том, что вам следует делать:
<!--NOTE: Include xmlns:local=" .. " appropriately for your project-->
<Window.Resources>
<sys:String x:Key="SourceA">This text will be normal..</sys:String>
<sys:String x:Key="SourceB">This text will be Bold!!!</sys:String>
</Window.Resources>
А теперь вы можете сделать так:
<local:BindableRichTextBox>
<!--<local:BindableRichTextBox.Document>-->
<MultiBinding Converter="{x:Static local:MySourceBToBoldConverter.Instance}">
<Binding Source="{StaticResource SourceA}" />
<Binding Source="{StaticResource SourceB}" />
</MultiBinding>
<!--</local:BindableRichTextBox.Document>-->
</local:BindableRichTextBox>
А затем создайте класс MySourceBToBoldConverter
, который наследуется от IMultiValueConverter
следующим образом:
public class MySourceBToBoldConverter : IMultiValueConverter
{
public static readonly MySourceBToBoldConverter Instance = new MySourceBToBoldConverter();
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//Now you'll get value from Source A as value[0]
// and value from Source B as value[1]
//Do whatever you want like bold etc...
//and return the result
string normalText = values[0] as string;
string boldText = values[1] as string;
Bold bold = new Bold();
bold.Inlines.Add(boldText);
Paragraph para = new Paragraph();
para.Inlines.Add(normalText);
para.Inlines.Add(bold);
FlowDocument rtbDocument = new FlowDocument();
rtbDocument.Blocks.Add(para);
return rtbDocument;
}
public object[] ConvertBack(object value, ... )
{
//Convert the object returned by Convert() back
//to its original form if it's possible;
//otherwise throw not supported exception ;)
throw new NotImplementedException();
}
}
В настоящее время у меня нет рабочего ПК, на котором установлена VS, поэтому я не могу привести рабочий пример, но продолжайте поиск в google / msdn / stackoverflow 4 MultiBinding
и IMultiValueConverter
и вы найдете несколько хороших примеров.
Проверьте рабочий пример здесь .
С уважением,
Михир Гокани