Run
実行時にコード内にデータバインドしようとしていますTextBlock
が、一生その方法を理解することはできません。
インターネット上のいくつかの情報源によると、これはいくつかの (あまりきれいではない) 追加の回避策なしでは不可能であり、さらに重要なことに、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 で実行できることを示すためのものです。コードでバインディングを作成する必要がある理由は、データ バインドが必要な他の要素を動的に作成するコントロールがあるためです。
アップデート:
Pete と私が両方とも知ったように、 には依存関係プロパティがありますがText
、それは非公開です。それが XAML を介して機能する理由だと思います (xaml パーサーには、リフレクションに関してはおそらくより多くの権利があり、クラスに関する一般的な知識がより多くあります)。
利点は、これが (試してテストした) XamlReader.Load() でも機能することを意味します。これは、(これまでのところ) 私が思いついた最もクリーンなソリューションです。
でも、もっといいものがあれば、教えていただけると嬉しいです。