DRD94 Ответов: 1

Событие пожара на странице из mainwindow


У меня есть окно, в котором размещена страница. Я хочу запустить событие на странице, когда пользователь нажимает кнопку Отмена при закрытии главного окна. В данный момент я изо всех сил пытаюсь понять, как запустить событие на странице из окна. Вот это событие на странице;

public void OnChangeUserEvent()
{
    var _employeeSelectionWindow = new EmployeeSelectionWindow();
    _employeeSelectionWindow.ReturnEmployeeDetails += LoadSelectedEmployeeAsLoggedInUser;
    _employeeSelectionWindow.ShowDialog();
}


И вот когда я хотел бы его запустить (этот метод находится в окне, размещающем страницу);

private void OnWindowClosed(object sender, System.ComponentModel.CancelEventArgs e)
{
    var result = MessageBox.Show(@"Are you sure you want to exit the database?" + Environment.NewLine + "Click cancel to change user.",
                                "", MessageBoxButton.YesNoCancel);
    if (result == MessageBoxResult.Yes)
    {
        Environment.Exit(0);
    }
    else if (result == MessageBoxResult.Cancel)
    {
        //Fire the event on the page here!
        e.Cancel = true;
    }
    else
    {
        e.Cancel = true;
    }
}


Что я уже пробовал:

Я пробовал использовать что-то вроде;

((LoginPage)e.Content).UserChangeEvent+= new EventHandler(MainWindow_NewRecordSaved);


до сих пор у меня ничего не получалось.

1 Ответов

Рейтинг:
8

njammy

Попробуйте следующий пример:

Разметка главного окна

<Window x:Class="WpfApp.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WpfApp"

        mc:Ignorable="d"

        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button x:Name="ShowPageButton" Content="Show Page" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75" Click="ShowPageButton_Click"/>
        <Frame x:Name="frame" Content="Frame" HorizontalAlignment="Left" Height="247" Margin="10,37,0,0" VerticalAlignment="Top" Width="507"/>
        <Button x:Name="CancelButton" Content="Cancel" HorizontalAlignment="Left" Margin="414,300,0,0" VerticalAlignment="Top" Width="76" Click="CancelButton_Click"/>
    </Grid>
</Window>

Код главного окна
public partial class MainWindow : Window
    {
        private Page1.OnMainWindowEvent CancelEvent;
        private Page1 page1;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void ShowPageButton_Click(object sender, RoutedEventArgs e)
        {
            CancelEvent = new Page1.OnMainWindowEvent(OnCancelClicked);
            page1 = new Page1();
            page1.RegisterMainWindowEvent(CancelEvent);
            frame.Content = page1;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            OnCancelClicked("Cancel clicked on main window.");
        }

        private void OnCancelClicked(string message)
        {
            page1.DoSomething(message);
        }
    }

Страница1 разметки
<Page x:Class="WpfApp.Page1"

      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 

      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

      xmlns:local="clr-namespace:WpfApp"

      mc:Ignorable="d" 

      d:DesignHeight="300" d:DesignWidth="300"

      Title="Page1">

    <Grid>
        <Label x:Name="label" Content="Hi I am Page1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>

    </Grid>
</Page>

Код страницы 1
public partial class Page1 : Page
    {
        public delegate void OnMainWindowEvent(string eventName);
        private event OnMainWindowEvent MainWindowEvent;

        public Page1()
        {
            InitializeComponent();
        }

        public void RegisterMainWindowEvent(OnMainWindowEvent eventHandler)
        {
            MainWindowEvent = eventHandler;
        }

        public void DoSomething(string someMessage)
        {
            MessageBox.Show(someMessage);
            label.Content = someMessage;
        }
    }