0

「Frequency」という名前の依存関係プロパティにバインドされたテキストブロックを持つグリッドを備えたカスタム WPF ユーザー コントロールをシリアル化しようとしています。テキストブロックを定義するスニペットは次のとおりです (ユーザー コントロールの定義は、ここに投稿するにはかなり長いです!):

<TextBlock x:Name="FrequencyText" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2"
                               FontFamily="Arial Rounded MT"
                               Foreground="White" FontSize="10" FontWeight="DemiBold" Margin="3"
                               TextBlock.Text="{Binding Frequency, ElementName=FrequencyButtonControlA, Path=Frequency}"
                               TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Left" />

ユーザーがいくつかのカスタム コントロールをキャンバスに配置してプロパティを変更できるようにするエディター ツールに取り組んでおり、既存の要素を複製する機能をユーザーに提供する必要があります。これを行うために、コントロールを XElement にシリアル化し、後で新しいコントロールをインスタンス化しています。シリアル化を実行するコードは次のとおりです。

var contentXaml = (commsPanelItem.Content != null) ? XamlWriter.Save(commsPanelItem.Content) : string.Empty;
var serializedItem = new XElement(
"CommsPanelItem",
new XElement("Type", commsPanelItem.GetType().ToString()),
new XElement("Left", Canvas.GetLeft(commsPanelItem.UIElement)),
new XElement("Top", Canvas.GetTop(commsPanelItem.UIElement)),
new XElement("Width", commsPanelItem.Width),
new XElement("Height", commsPanelItem.Height),
new XElement("zIndex", Panel.GetZIndex(commsPanelItem.UIElement)),
new XElement("Content", contentXaml),
commsPanelItem.GetAttributesForSavingPanelInConfigurator() as XElement);
return serializedItem;

私が抱えている問題は、テキストブロックをシリアル化するときに、「テキスト」フィールドが「頻度」依存関係プロパティへのバインディングを保持せず、ユーザーによって割り当てられた値 (「131.5」次の例):

TextBlock Text="131.5" FontFamily="Arial Rounded MT" FontWeight="SemiBold" FontSize="10" Foreground="#FFFFFFFF" TextAlignment="Center" Name="FrequencyText" Margin="3,3,3,3" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="2"

私の質問は: 実際の値の代わりに依存関係プロパティのバインディングをシリアル化できる方法はありますか?

前もって感謝します!

4

1 に答える 1

0

その値をプルする代わりに、FrameworkElements にある "GetBinding" メソッドを使用します。

BindingExpression bindingExpression = myTextBox.GetBindingExpression(TextBox.TextProperty);

その後、おそらく BindingExpression をシリアル化できます。

于 2012-11-02T16:53:54.470 に答える