2015-05-04 30 views
1

我有一個UserControl這是一個FlipView的ItemTemplate,它存在於我的MainPage中。此UserControl包含名稱爲x:Name="InkCanvas"的畫布。如何從MainPage訪問UserControl中的元素?

而且我想這個初始化Canvas和從我MainPage.xaml.cs訪問:

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

將其設置爲static忍不住!怎麼可能?

+0

如果您在MainPage中擁有用戶控件,則可以使用UserControlName.InkCanvas訪問它,或者在用戶控件中創建一個公用方法以返回畫布。 – Bells

回答

0

事實證明,如果UserControl不是我當前的ItemTemplate:我無法訪問它的任何控件。

0

試試這個:

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

您可以添加到您的UserControl.cs這種方法:

public Canvas GetInkCanvas() 
{ 
    return InkCanvas; 
} 

並以此形成MainPage.cs

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

但在一般 - 這是不是從您的UserControl分享您的Canvas是一個好主意。

+0

什麼是一個好主意? UserControl應該在我的MainPage中? – yalematta

+0

您可以將Canvas操作的所有邏輯移植到UserControl.cs中(作爲公共方法)。然後將UserControl添加到MainPage.xaml所需的位置。在MainPage.cs中 - 您將擁有UserControl實例(來自xaml),並且可以調用UserControl.cs中的所有公共方法。 – jimpanzer

0

我的理解是: 您的用戶控制是一個FlipView的項目模板,你不能找到方法來訪問其內容,因此,你需要的是:

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

getCanvas()是你想在你的用戶控件中訪問畫布的getter,你必須在YourUserControl.cs中實現它