【问题标题】:WPF Intercept GoBack() eventWPF 拦截 GoBack() 事件
【发布时间】:2021-06-27 22:19:51
【问题描述】:

我正在 .NET Core 3.1 中创建一个 WPF 应用程序。我用一个主窗口构建项目,并使用不同页面之间的导航。 在主页中,我有一个标签,在 C# 文件中我使用以下代码:

public partial class Main : Window
{
    private void ListProducts_Click(object sender, RoutedEventArgs e)
    {
        Frame.NavigationService.Navigate(new ListProducts(Frame));
    }
}

从这个页面我去另一个页面做一些事情:

public partial class ListProducts : Page
{
    private void Add_Click(object sender, RoutedEventArgs e)
    {
        frame.NavigationService.Navigate(new AddProduct(Frame));
    }
}

然后我返回这段代码:

public partial class AddProduct : Page
{
    private void Close_Click(object sender, RoutedEventArgs e)
    {
        frame.NavigationService.GoBack();
    }
}

从一个页面到另一个页面注入框架。当我使用 GoBack() 时,我想捕捉并触发 ListProducts 页面中的一些事件。如何拦截父窗口的GoBack()事件?

【问题讨论】:

  • 将关闭按钮移动到父窗口,您甚至可以将其显示在框架上方,单击时关闭当前页面。顺便说一句,学习 MVVM 和绑定可以为您打开 WPF 的强大功能。 NavigationWindow+Frame+Page 在 WPF 中不是一种流行的做法,因为它是由 Microsoft 以错误的方式设计的,包含不受欢迎的限制。
  • @MicheleBoscagin:ListProducts 不可能拦截发生在AddProduct 中的事情。你的意思是你想在ListProducts被导航回时执行一些操作,还是你想根据一些逻辑阻止导航发生?
  • @mm8 不,当 ListProduct 从 AddProduct 导航回来时,只需在 ListProduct 中执行一些操作

标签: c# wpf .net-core navigation


【解决方案1】:

您可以为ListProducts 处理Loaded 事件并在事件处理程序中执行您想要的任何逻辑:

public partial class ListProducts : Page
{
    private readonly Frame _frame;

    public ListProducts(Frame frame)
    {
        InitializeComponent();
        Loaded += OnLoaded;
        _frame = frame;
    }

    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        if (_frame.CanGoForward)
        {
            //handle navigate back logic here...
        }
    }
}

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多