[英]How can I get the parent container, e.g. PhoneApplicationPage, in Windows Phone?
I need to call a method in my MainPage.xaml.cs class when an event is handled in a child control. 当在子控件中处理事件时,我需要在我的MainPage.xaml.cs类中调用一个方法。 Calling
this.Parent
doesn't work, because it only returns the first DependencyObject in the tree, and I can't get the PhoneApplicationPage
from that 调用
this.Parent
不起作用,因为它只返回树中的第一个DependencyObject,而我无法从中获取PhoneApplicationPage
I have the following layout in my PhoneApplicationPage
: 我在
PhoneApplicationPage
有以下布局:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="AUTO"/>
<RowDefinition Height="*"/>
<RowDefinition Height="AUTO"/>
</Grid.RowDefinitions>
<Grid Height="85" VerticalAlignment="Top" Grid.Row="0"></Grid>
<Grid Grid.Row="1" Name="gridContent" />
<ug:UniformGrid Rows="1" Columns="5" Height="85" VerticalAlignment="Bottom" Grid.Row="2">
<tabs:TabItem Name="tabOverview" TabItemText="OVERVIEW" TabItemImage="overview_64.png" />
<tabs:TabItem Name="tabLogs" TabItemText="LOGS" TabItemImage="log_64.png"/>
</ug:UniformGrid>
</Grid>
with the following code: 使用以下代码:
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
gridContent.Children.Add(new OverviewUserControl());
}
public void UpdateContent(UserControl control)
{
// I need to call this method from the TabItem Tap event
gridContent.Children.Clear();
gridContent.Children.Add(control);
}
}
When a tap event occurs, I need to replace the content of gridContent
with whatever corresponds to the user's tap. 当发生点击事件时,我需要将
gridContent
的内容替换为与用户点击相对应的内容。 this is how I handle the tap event: 这是我处理点击事件的方式:
private void TabItem_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
// var parent = this.Parent; //<-- this doesn't get the PhoneApplicationPage
var ti = sender as TabItem;
if (ti != null)
{
string tab = "";
switch (ti.Name)
{
case "tabOverview":
// I need a reference to MainPage here to call
// MainPage.UpdateContent(new LogsUserControl())
break;
case "tabLogs":
// I need a reference to MainPage here to call
// MainPage.UpdateContent(new OverviewUserControl())
break;
}
}
}
Question 题
So the question is how can I call a method in MainPage
from TabItem_Tap
? 所以问题是如何从
TabItem_Tap
调用MainPage
的方法?
This did it: 这样做了:
var currentPage = ((PhoneApplicationFrame)Application.Current.RootVisual).Content as MainPage;
Usage: 用法:
private void TabItem_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
var currentPage = ((PhoneApplicationFrame)Application.Current.RootVisual).Content as MainPage;
if (ti != null)
{
switch (ti.Name)
{
case "tabOverview":
currentPage.UpdateContent(new OverviewUserControl());
break;
case "tabLogs":
currentPage.UpdateContent(new LogsUserControl());
break;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.