【发布时间】:2011-03-09 23:29:15
【问题描述】:
我在 Windows Phone 7 上使用 Silverlight。
我想以粗体显示 TextBlock 中某些文本的第一部分,其余部分以普通字体显示。完整的文本必须换行。我希望粗体部分包含来自 ViewModel 中一个属性的文本,而纯文本包含来自不同属性的文本。
TextBlock 在与 LongListSelector 关联的 DataTemplate 中定义。
我最初的尝试是:
<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 代码隐藏事件处理程序不会重新初始化 Runs,所以很快就会显示错误的文本......
我已经研究过使用 LongListSelector 的 Linked 事件(我已经使用它来释放我在列表中显示的图像),但我看不出如何使用它来重新初始化 Runs 的文本属性.
任何帮助表示赞赏!
【问题讨论】:
-
+1。好问题,我也想知道这个问题。
标签: silverlight windows-phone-7