我正在尝试在运行时对代码中Run
的 a进行数据绑定TextBlock
,但我终生无法弄清楚如何。
Internet 上的一些消息来源表明,如果没有一些(不太漂亮)额外的解决方法,这是不可能的,更重要的是,当您尝试在 XAML 中执行此操作时,它应该完全失败。
然而,在我的应用程序中,我有以下内容,效果很好:
<DataTemplate x:Key="PitchTemplate">
<Grid Width="120" Height="120" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Center"
TextAlignment="Center">
<Run Text="{Binding}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" FontSize="36"/>
<LineBreak/>
<Run Text="{Binding Frequency, StringFormat=\{0:n2\}Hz}" FontFamily="{StaticResource PhoneFontFamilyNormal}" Foreground="{StaticResource PhoneSubtleBrush}"/>
</TextBlock>
</Grid>
</DataTemplate>
所以我想:如果可以在 XAML 中完成,那么应该可以在代码中完成。
到目前为止,无济于事。在代码中使用“常规”绑定方式是行不通的;该类Run
不继承自FrameworkElement
,因此没有SetBinding
方法,并且它的Text
属性不是DependencyProperty
.
使用BindingOperations.SetBinding
不起作用,因为该Text
属性不是DependencyProperty
.
我已经到了我愿意接受它不能在运行时完成的点上(尽管不是没有最后一次尝试 StackOverflow),但我仍然很好奇是否
- 这可以在运行时在代码中完成吗?
如果不:
- 它如何在 XAML 中工作?
编辑:
显示的示例只是为了表明它可以在 XAML 中完成。我需要在代码中创建绑定的原因是我有一个控件可以动态创建其他元素,这些元素需要进行数据绑定。
更新:
As Pete and I both found out, there is a dependency property for Text
, but it's private. I assume that's why it does work through XAML (the xaml parser probably has more rights when it comes to reflection, and more knowledge in general about classes).
The upside is, that this means (tried & tested) it also works through XamlReader.Load(), which is (sofar) the cleanest solution I've come up with.
But if anyone has anything better, I'd be glad to hear about it.