2

我是 WPF 的新手,我喜欢在另一个 xaml 页面上使用现有的画布和很多孩子。我将它保存在一个全局属性中,我想像这样使用它:

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

当我加载页面时,画布上什么都没有,但在代码隐藏中,有孩子。我做错了什么?

4

1 回答 1

3

你不应该UIElementsViewModels. 其次,您不能在 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

于 2013-10-20T18:31:51.580 回答