2012-11-02 19 views
0

我試圖序列化一個自定義的WPF用戶控件,該控件的特徵是具有綁定到名爲「Frequency」的依賴項屬性的文本塊的網格。定義文本塊是如下的片斷(用戶控制的定義是相當長它張貼在這裏!):如何在將WPF用戶控件序列化到XElement時保持綁定

<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; 

我遇到的問題是,序列化文本塊時,「文本」字段不保留的結合,「頻率」依賴屬性,

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" 

我的問題是:有沒有什麼辦法能夠序列化依賴項屬性的綁定的實際價值,而不是它只是獲取與(在下面的例子中「131.5」)由用戶指定的值導出?

在此先感謝!

回答

0

使用上FrameworkElements不要扯它的價值發現「GetBinding」的方法:

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

然後你可以或許序列化的BindingExpression。