C# 在用户控件中访问主页UI

C# 在用户控件中访问主页UI,c#,xaml,windows-phone-8,C#,Xaml,Windows Phone 8,我有mainPage.xaml和userControl.xaml。我在mainPage中调用了userControl。mainPage有一个名为“grd”的网格,userControl有一个名为“btn”的按钮。现在,当我单击按钮时,将引发userControl的click事件。在本例中,我想隐藏网格(mainPage.xaml中的网格)。如何访问userControls中的主页控件?您可以使用以下代码访问当前显示的页面: var mainPage = (PhoneApplicationPage

我有mainPage.xaml和userControl.xaml。我在mainPage中调用了userControl。mainPage有一个名为“grd”的网格,userControl有一个名为“btn”的按钮。现在,当我单击按钮时,将引发userControl的click事件。在本例中,我想隐藏网格(mainPage.xaml中的网格)。如何访问userControls中的主页控件?

您可以使用以下代码访问当前显示的页面:

var mainPage = (PhoneApplicationPage)((App)Application.Current).RootFrame.Content;

您可以使用以下代码访问当前显示的页面:

var mainPage = (PhoneApplicationPage)((App)Application.Current).RootFrame.Content;

您可以使用以下代码访问当前显示的页面:

var mainPage = (PhoneApplicationPage)((App)Application.Current).RootFrame.Content;

您可以使用以下代码访问当前显示的页面:

var mainPage = (PhoneApplicationPage)((App)Application.Current).RootFrame.Content;

查看我的答案,在OP想要设置appbar的可见性的情况下,我的答案也适用于
Grid


查看我的答案,在OP想要设置appbar的可见性时,我的答案也适用于
网格


查看我的答案,在OP想要设置appbar的可见性时,我的答案也适用于
网格


查看我的答案,在OP想要设置appbar的可见性时,我的答案也适用于
网格

如果您使用的是MVVM(正如您在对@har07答案的评论中所述),则不应使用用户控制页中的事件处理程序在主页中隐藏网格。相反,您应该将命令绑定到控件页中的按钮。此命令应更改主页的视图模型,该视图模型应将此更改通知主页

在下一个示例中,我使用了
mvvmlight
,但其他MVVM库的工作原理可能几乎相同

向主页的视图模型添加属性:

public class MainViewModel : BaseViewModel
{
  …your code here
  private bool _isValid;
  public bool IsValid
  {
    get
    {
      return _isValid;
    }
    set
    {
      _isValid = value;
      RaisePropertyChange("IsValid");
    }
  }
}
在主页中,将
可见性
绑定到
IsValid

<Grid Visibility="{Binding IsValid, Converter={StaticResource converter}}">
  …content here
</Grid>
在用户控制页面中,将
按钮
绑定到
命令

<Button Command="{Binding InvalidateGridCommand}">
  Invalidate
</Button>

使无效
现在,单击按钮将
MainViewModel
上的
IsValid
设置为false,这将反过来隐藏
网格

,如果您使用的是MVVM(正如您在对@har07的回答的评论中所述),则不应使用用户控件页中的事件处理程序在主页中隐藏网格。相反,您应该将命令绑定到控件页中的按钮。此命令应更改主页的视图模型,该视图模型应将此更改通知主页

<Grid Visibility="{Binding IsValid, Converter={StaticResource converter}}">
  …content here
</Grid>
在下一个示例中,我使用了
mvvmlight
,但其他MVVM库的工作原理可能几乎相同

向主页的视图模型添加属性:

public class MainViewModel : BaseViewModel
{
  …your code here
  private bool _isValid;
  public bool IsValid
  {
    get
    {
      return _isValid;
    }
    set
    {
      _isValid = value;
      RaisePropertyChange("IsValid");
    }
  }
}
在主页中,将
可见性
绑定到
IsValid

<Grid Visibility="{Binding IsValid, Converter={StaticResource converter}}">
  …content here
</Grid>
在用户控制页面中,将
按钮
绑定到
命令

<Button Command="{Binding InvalidateGridCommand}">
  Invalidate
</Button>

使无效
现在,单击按钮将
MainViewModel
上的
IsValid
设置为false,这将反过来隐藏
网格

,如果您使用的是MVVM(正如您在对@har07的回答的评论中所述),则不应使用用户控件页中的事件处理程序在主页中隐藏网格。相反,您应该将命令绑定到控件页中的按钮。此命令应更改主页的视图模型,该视图模型应将此更改通知主页

<Grid Visibility="{Binding IsValid, Converter={StaticResource converter}}">
  …content here
</Grid>
在下一个示例中,我使用了
mvvmlight
,但其他MVVM库的工作原理可能几乎相同

向主页的视图模型添加属性:

public class MainViewModel : BaseViewModel
{
  …your code here
  private bool _isValid;
  public bool IsValid
  {
    get
    {
      return _isValid;
    }
    set
    {
      _isValid = value;
      RaisePropertyChange("IsValid");
    }
  }
}
在主页中,将
可见性
绑定到
IsValid

<Grid Visibility="{Binding IsValid, Converter={StaticResource converter}}">
  …content here
</Grid>
在用户控制页面中,将
按钮
绑定到
命令

<Button Command="{Binding InvalidateGridCommand}">
  Invalidate
</Button>

使无效
现在,单击按钮将
MainViewModel
上的
IsValid
设置为false,这将反过来隐藏
网格

,如果您使用的是MVVM(正如您在对@har07的回答的评论中所述),则不应使用用户控件页中的事件处理程序在主页中隐藏网格。相反,您应该将命令绑定到控件页中的按钮。此命令应更改主页的视图模型,该视图模型应将此更改通知主页

<Grid Visibility="{Binding IsValid, Converter={StaticResource converter}}">
  …content here
</Grid>
在下一个示例中,我使用了
mvvmlight
,但其他MVVM库的工作原理可能几乎相同

向主页的视图模型添加属性:

public class MainViewModel : BaseViewModel
{
  …your code here
  private bool _isValid;
  public bool IsValid
  {
    get
    {
      return _isValid;
    }
    set
    {
      _isValid = value;
      RaisePropertyChange("IsValid");
    }
  }
}
在主页中,将
可见性
绑定到
IsValid

<Grid Visibility="{Binding IsValid, Converter={StaticResource converter}}">
  …content here
</Grid>
在用户控制页面中,将
按钮
绑定到
命令

<Button Command="{Binding InvalidateGridCommand}">
  Invalidate
</Button>

使无效

现在,单击按钮将
MainViewModel
上的
IsValid
设置为false,这将反过来隐藏适用于windows Phone 8的
网格

<Grid Visibility="{Binding IsValid, Converter={StaticResource converter}}">
  …content here
</Grid>
(((Application.Current as App).RootVisual as PhoneApplicationFrame).Content as Page)

对于windows Phone 8,请尝试以下操作:

(((Application.Current as App).RootVisual as PhoneApplicationFrame).Content as Page)

对于windows Phone 8,请尝试以下操作:

(((Application.Current as App).RootVisual as PhoneApplicationFrame).Content as Page)

对于windows Phone 8,请尝试以下操作:

(((Application.Current as App).RootVisual as PhoneApplicationFrame).Content as Page)

我来这里是想找到这个问题的答案,经过一些尝试后,我可以使用以下工具访问我的Windows Phone 8.1应用程序的主页:

var mainPage = (MainPage)(Window.Current.Content as Frame).Content
.
要访问主页中声明的控件,您还需要给它们一个
x:Name
,并将它们的
x:FieldModifier
更改为
“内部”
“公共”
我来这里是为了找到这个问题的答案,经过一些尝试后,我可以使用以下工具访问我的Windows Phone 8.1应用程序的主页:

var mainPage = (MainPage)(Window.Current.Content as Frame).Content
.
要访问主页中声明的控件,您还需要给它们一个
x:Name
,并将它们的
x:FieldModifier
更改为
“内部”
“公共”
我来这里是为了找到这个问题的答案,经过一些尝试后,我可以使用以下工具访问我的Windows Phone 8.1应用程序的主页:

var mainPage = (MainPage)(Window.Current.Content as Frame).Content
.
要访问主页中声明的控件,您还需要给它们一个
x:Name
,并将它们的
x:FieldModifier
更改为
“内部”
“公共”

,我来这里是想找到关于