相关疑难解决方法(0)

数据绑定TextBlock在Silverlight/WP7中运行

我在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>
Run Code Online (Sandbox Code Playgroud)

这在运行时因失败的"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>
Run Code Online (Sandbox Code Playgroud)

在代码隐藏中(是的,我是绝望的!):

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;
}
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但因为我正在使用LongListSelector,虽然项目被回收,但是Loaded codebehind事件处理程序不会重新初始化运行,所以很快就会显示错误的文本......

我已经看过使用LongListSelector的Linked事件(我已经用它来释放我在列表中显示的图像),但我看不出如何使用它来重新初始化Runs的文本属性.

任何帮助赞赏!

silverlight windows-phone-7

11
推荐指数
1
解决办法
7481
查看次数

标签 统计

silverlight ×1

windows-phone-7 ×1