我是 WPF 的新手,我喜欢在另一个 xaml 页面上使用现有的画布和很多孩子。我将它保存在一个全局属性中,我想像这样使用它:
this.DataContext = new TimeDesignerViewModel();
this.myCanvas = (this.DataContext as TimeDesignerViewModel).TdCanvas;
当我加载页面时,画布上什么都没有,但在代码隐藏中,有孩子。我做错了什么?
你不应该UIElements
在ViewModels
. 其次,您不能在 WPF 中拥有两个具有相同控件的父级。因此,如果您有 one的一个Canvas
孩子,则window
该实例Canvas
不能是 other 的孩子window/UserControl/Page
。但是如果你想在两个地方都有相同的布局,你可以做什么来定义你的画布作为你的Application.Resources
资源App.xaml
<Application.Resources>
<Canvas x:Key="myCanvas" x:Shared="false">
</Canvas>
</Application.Resources>
确保设置 x:Shared="false" 以便在每次资源需求时创建新实例。
现在,无论您想拥有此资源,您都可以在 xaml 中直接将其引用为{StaticResource myCanvas}
或者在代码中你可以拥有它Application.Current.Resources["myCanvas"] as Canvas