Я использую Silverlight на Windows Phone 7.
Я хочу отобразить первую часть некоторого текста в текстовом блоке жирным шрифтом, а остальное - в обычном шрифте. Полный текст должен быть завершен. Я хочу, чтобы полужирная часть содержала текст из одного свойства в моей модели ViewModel, а простой текст содержал текст из другого свойства.
TextBlock определен в DataTemplate, связанном с LongListSelector.
Моя первоначальная попытка:
<TextBlock TextWrapping="Wrap">
<TextBlock.Inlines>
<Run Text="{Binding Property1}" FontWeight="Bold"/>
<Run Text="{Binding Property2}"/>
</TextBlock.Inlines>
</TextBlock>
Это не выполняется во время выполнения с эффектно бесполезным "AG_E_RUNTIME_MANAGED_UNKNOWN_ERROR". Это известная проблема, поскольку элемент Run не является элементом FrameworkElement и не может быть привязан.
Моя следующая попытка состояла в том, чтобы поместить заполнители на место, а затем обновить их в коде:
<TextBlock Loaded="TextBlockLoaded" TextWrapping="Wrap">
<TextBlock.Inlines>
<Run FontWeight="Bold">Placeholder1</Run>
<Run>Placeholder2</Run>
</TextBlock.Inlines>
</TextBlock>
В кодировке (да, я отвратителен!):
private void TextBlockLoaded(object sender, RoutedEventArgs e)
{
var textBlock = (TextBlock)sender;
var viewModel = (ViewModel)textBlock.DataContext;
var prop1Run = (Run)textBlock.Inlines[0];
var prop2Run = (Run)textBlock.Inlines[1];
prop1Run.Text = viewModel.Property1;
prop2Run.Text = viewModel.Property2;
}
Казалось, что это работает, но поскольку я использую LongListSelector, хотя элементы перерабатываются, обработчик события Loaded codebehind не повторно инициализирует Runs, поэтому очень быстро отображается неправильный текст...
Я рассмотрел использование события LongListSelector Linked (которое я уже использую, чтобы освободить изображения, отображаемые в списке), но я не вижу, как я могу использовать это для повторной инициализации свойств текста Runs.
Любая помощь оценивается!