我正在写一个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!!")
}
答案 0 :(得分:1)
有很多方法可以做到这一点。我不会进入我认为最好的方式(参见Model-View-ViewModel)并尝试回答你的问题。
Window和Page实例必须能够相互“找到”,这样Window可以通过Page a方法在单击C按钮时执行,或者Window可以使用Page注册事件点击C按钮时会触发。
问题是,Window是否直接访问Page实例,或者您的应用程序是否使用Frame的Navigation框架来处理页面加载?
如果是第一个,那么Window注册一个可以放置在Page类的公共面上的事件将是微不足道的。如果是第二个,你将不得不听Frame的导航服务,以便找到Page实例。
另一种选择是Window的DataContext流向Page。您可以创建一个Window和Page都可以绑定的类,这样当单击Page的按钮时,它可以调用该上下文类中的一个方法,然后该类可以通知Window该按钮被单击。