0

我正在尝试序列化一个自定义 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 回答