【问题标题】:Using an existing canvas on another page in WPF在 WPF 的另一个页面上使用现有画布
【发布时间】:2013-10-20 18:21:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# wpf canvas


    【解决方案1】:

    你不应该在ViewModels 中有UIElements。其次,您不能在 WPF 中拥有两个具有相同控件的父级。因此,如果您有一个Canvas 的一个window 的子级,则该Canvas 的同一实例不能是另一个window/UserControl/Page 的子级。 但是如果你想在两个地方都有相同的布局,你可以在Application.ResourcesApp.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一样拥有它

    【讨论】:

    • 感谢您的快速回答。我只有另一个问题:当我喜欢像这样向画布添加元素时:(Application.Current.Resources["myCanvas"] as Canvas).Children.Add(newThumb);该元素不会在画布子列表中。我还缺少其他东西吗?
    • 是的..您必须首先将画布添加为窗口或页面的子级,无论您使用什么..然后将子级添加到它
    • 哦,真是个菜鸟问题,谢谢,现在可以了!我误解了一些东西:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2015-02-15
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多