2016-03-08 24 views
0

我最近使用WPF。我對C#和WPF很新穎。我與一些孩子構建了動態邊界。我想從這個邊框(動態和與孩子)的副本,並只改變一些屬性。似乎只有一個默認和沒有複製構造函數MSDN BorderC#WPF,從WPF節點和所有子節點動態深入複製

我找到了相關答案:How Can you Clone a Wpf Object

有沒有辦法避免複製XAML?

我的問題:是否有一個inbuild函數從WPF邊框構造深層副本。爲什麼沒有複製構造函數?

謝謝你的時間。

+1

考慮將其設爲用戶控件並使用動態位的依賴項屬性。 –

+0

所以基本上,你想深度拷貝一個包含所有子節點的整個任意WPF節點?因爲那是你的邊界可以包含的內容。你可能會更好,從你的問題中刪除邊界,因爲標題看起來很具體,而解決方案需要是通用的。 – grek40

+0

@ grek40你是對的。我改變了標題。謝謝 – Mehno

回答

0

我想給出兩個小「爲什麼不」的例子。

考慮以下XAML片段:

<DockPanel LastChildFill="False"> 
    <TextBlock DockPanel.Dock="Right" Text="Test"/> 
</DockPanel> 

的依賴屬性LastChildFillText是比較容易的,因爲它們在某種程度上屬於自己的對象。

但是,DockPanel.Dock是一個附加屬性,所以它附加到的DependencyObject可能不知道它的存在。任意附加屬性可以附加到任意依賴對象。該屬性不屬於該對象,但在副本上忽略它會導致生成的佈局發生更改。

第二個例子:

<Border> 
    <ContentPresenter Content="{Binding SomeObject}"/> 
</Border> 

有可能是對的SomeObject類型一個DataTemplate,所以結果的可視化樹將被建造,但SomeObject本身不是一個WPF特定的對象,所以你有什麼語義期望獲取邊界節點的深層副本?

通常你可能要更具體一些,你是否想深複製邏輯樹或可視化樹。你的問題傾向於邏輯樹,但我懷疑你更喜歡複製佈局的視覺表現。有關此事的更多詳情,請諮詢您最喜愛的搜索引擎。以下是兩個隨機點:MSDN on WPF TreesWPF tutorial on logical and visual tree