如何在windows metro应用程序中访问子页面(用户控件)中的父页面控件?

时间:2013-08-13 07:21:19

标签: windows-8

我需要访问windows 8 metro app中usercontrols(子页面)中的主页值。请告诉我怎么做?

在子页面中,我试图访问这样的主页控件:

 DealersPage main = new DealersPage();

            Grid grd = main.FindName("visibleGrid") as Grid;
            grd.Visibility = Visibility.Collapsed;

但没有运气!!!请告诉我

编辑:在子页面(usercontrol)上的图像点击事件我写下了代码。

 private void imgClose_Tapped(object sender, TappedRoutedEventArgs e)
        {
            DealersPage main = this.Parent as DealersPage;
            if (main != null)
            {
                Grid grd = main.FindName("visibleGrid") as Grid;
                grd.Visibility = Visibility.Collapsed;
            }

            settingsControl.Visibility = Visibility.Collapsed;
        }
在MainPage(DealersPage)中我的设计是这样的:

 <Grid HorizontalAlignment="Left" Height="758" Margin="0,10,0,0"   VerticalAlignment="Top" Width="1366"  x:Name="visibleGrid" Opacity="0.85" Background="#FF858585">
            <Grid HorizontalAlignment="Left" Height="600" Margin="454,108,0,0" Visibility="Collapsed" VerticalAlignment="Top" Width="500" x:Name="gridpopup">
                <local:Settings x:Name="SettingsUsercontrol"  Visibility="Collapsed"  Height="600" Width="500"/>
</Grid>
</Grid>

1 个答案:

答案 0 :(得分:0)

从您的代码中,您 NOT 实际访问存在用户控件的主页控件。通过使用new DealersPage(),您实际上正在创建 DealersPage (您的主页面)的新实例,FindName可能会返回该网格;但那永远不会是你真正想要的那个。

您的应该是(DealersPage)this.Parent,这将是实际的父页面。

代码:您的UserControl中的某个地方 -

DealersPage main = this.Parent as DealersPage;
if(main != null)
{
     Grid grd = main.FindName("visibleGrid") as Grid;
     grd.Visibility = Visibility.Collapsed;
}