2013-10-20 12 views
2

我在WPF中有點新,我喜歡在另一個xaml頁面上使用現有的畫布以及很多孩子。我在一個全局屬性保存它,我想用這樣的:在WPF的另一個頁面上使用現有的畫布

this.DataContext = new TimeDesignerViewModel(); 
this.myCanvas = (this.DataContext as TimeDesignerViewModel).TdCanvas; 

當我加載頁面,沒有什麼在畫布上,而是在後臺代碼,也有孩子。我做錯了什麼?

回答

3

您不應該在ViewModelsUIElements。其次,你不能在WPF中擁有兩個相同控制的父母。因此,如果您有一個Canvas孩子的一個windowCanvas的相同實例不能是其他window/UserControl/Page的孩子。 但是,如果你想有在這兩個地方同樣的佈局,你可以做什麼它來定義你的畫布作爲資源在Application.ResourcesApp.xaml

<Application.Resources> 

    <Canvas x:Key="myCanvas" x:Shared="false"> 
    </Canvas> 
</Application.Resources> 

請務必設置X:爲了共享=「假」根據資源的每個需求創建新實例。

現在,無論你想擁有這個資源,你可以在XAML中直接引用作爲{StaticResource myCanvas}

或代碼,你可以把它像Application.Current.Resources["myCanvas"] as Canvas

+0

謝謝你的快速答覆。我只是有另一個問題:當我喜歡這樣添加一個元素到畫布上:(Application.Current.Resources [「myCanvas」] Canvas).Children.Add(newThumb); 該元素將不在畫布子項列表中。我錯過了別的嗎? – Wheeler

+0

是的..你將不得不首先添加畫布作爲窗口或頁面的孩子,無論你使用什麼..然後添加孩子到它 – Nitin

+0

哦,什麼是noob問題,謝謝,它現在工作!我誤解了:) – Wheeler

相關問題