【问题标题】:How the Page call the function in a Window页面如何在窗口中调用函数
【发布时间】:2010-08-19 14:24:34
【问题描述】:

我正在编写一个 WPF 程序。现在我遇到了一些问题。 有一个窗口,包括一个框架,有两个名为 A 和 B 的按钮。

在框架内有一个带有按钮 C 的页面。

问题是:当我单击页面中的 C 按钮时,如何触发 A 按钮的事件处理程序?

框架 xaml:

<Frame x:Name="Frame1" 
  NavigationUIVisibility="Hidden" 
  Margin="-50,0,-163,-11" 
  Grid.RowSpan="2">
</Frame>

事件处理程序:

 private void button1_Click(object sender, RoutedEventArgs e)
 {
     PageFind p = new PageFind();
     this.Frame1.Content = p;
 }
 private void button2_Click(object sender, RoutedEventArgs e)
 {
   MessageBox.Show("Succeed!!")
 } 

【问题讨论】:

    标签: wpf


    【解决方案1】:

    有很多方法可以做到这一点。我不会深入探讨我认为最好的方法(请参阅模型-视图-视图模型)并尝试回答您的问题。

    Window 和 Page 实例必须能够“找到”对方,这样 Window 才能在单击 C 按钮时向 Page 传递一个方法来执行,或者这样 Window 才能向 Page 注册事件单击 C 按钮时将触发。

    问题是,Window 是否直接访问 Page 实例,或者您的应用程序是否使用 Frame 的 Navigation 框架来处理加载您的 Pages?

    如果是第一个,那么 Window 注册一个您可以在 Page 类的公共面上放置的事件将是微不足道的。如果是第二个,您必须侦听 Frame 的导航服务才能找到 Page 实例。

    另一种选择是Window的DataContext流向Page。您可以创建一个 Window 和 Page 都可以绑定的类,这样当单击 Page 的按钮时,它可以调用该上下文类中的方法,然后通知 Window 该按钮已被单击。

    【讨论】:

    • 感谢您的建议。我想我找到了解决这个问题的方法。我尝试这样做:MainWindow mw; public MainWindow MWindow { get {return MWindow;} set {MWindow = value;} } 对不起,我的英语很差,我只能用代码来描述它。请问我有你的电子邮件,如果我有问题我可以向你寻求帮助?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    相关资源
    最近更新 更多