【问题标题】:How to access an element in UserControl from the MainPage?如何从 MainPage 访问 UserControl 中的元素?
【发布时间】:2015-05-04 09:27:23
【问题描述】:

我有一个 UserControl,它是我的 MainPage 中存在的 FlipView 的 ItemTemplate。这个UserControl 包含一个名为x:Name="InkCanvas" 的画布。

我想初始化这个 Canvas 并从我的MainPage.xaml.cs 访问它:

private readonly CanvasManager m_CanvasManager;
m_CanvasManager = new CanvasManager(InkCanvas);

将其设置为 static 无济于事!怎么可能?

【问题讨论】:

  • 如果您在MainPage中有用户控件,您可以使用UserControlName.InkCanvas访问它或在用户控件中创建一个公共方法以返回画布。

标签: c# windows-store-apps


【解决方案1】:

试试这个:

private readonly CanvasManager m_CanvasManager;
this.InkCanvas = new CanvasManager();
m_CanvasManager = this.InkCanvas;

【讨论】:

    【解决方案2】:

    您可以将此方法添加到您的UserControl.cs

    public Canvas GetInkCanvas()
    {
       return InkCanvas;
    }
    

    并使用MainPage.cs:

    var canvas = userControl.GetInkCanvas(); // userControl - here is the instanse of UserControl.
    

    但总的来说 - 从您的 UserControl 分享您的 Canvas 并不是一个好主意。

    【讨论】:

    • 有什么好主意? UserControl 应该在我的 MainPage 内?
    • 您可以移动所有用于 Canvas 操作的逻辑,包括 UserControl.cs(作为公共方法)。然后将 UserControl 添加到 MainPage.xaml 的必要位置。在 MainPage.cs - 您将拥有 UserControl 实例(来自 xaml),并且可以从 UserControl.cs 调用所有公共方法。
    【解决方案3】:

    我的理解是: 您的用户控件是 FlipView 的项目模板,您无法找到访问其内容的方法,因此,您需要的是:

    (yourFlipView.Items[index] as YourUserControl).getCanvas();
    

    getCanvas() 是您要在用户控件中访问的画布的 getter,您必须在 YourUserControl.cs 中实现它

    【讨论】:

      【解决方案4】:

      事实证明,如果这个UserControl 不是我当前的ItemTemplate:我无法访问它的任何控件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 2015-06-17
        相关资源
        最近更新 更多