C# WPF Как обратиться к RoutedEvent="Loaded" дочернего окна из главного?

XAML главного окна

<Window x:Class="Pearlbook_Core.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:Pearlbook_Core"       
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
        mc:Ignorable="d"
        WindowStartupLocation="CenterScreen" 
        FontFamily="Microsoft YaHei UI Light"
        WindowStyle="None"  Width="1000" Height="600" ResizeMode="NoResize" MouseDown="Window_MouseDown" Name="Win" >
    <Window.Triggers>
        <EventTrigger RoutedEvent="Loaded" >
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation To="0.5" Duration="0" Storyboard.TargetProperty="Opacity" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Window.Triggers>

XAML дочернего окна

<Window x:Class="Pearlbook_Core.AddPhones"
    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:Pearlbook_Core"
    xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
    mc:Ignorable="d"
    x:Name="Addphone" Height="550" Width="300" ResizeMode="NoResize"  WindowStartupLocation="CenterScreen" WindowStyle="None"  >

Как установить RoutedEvent в EventTrigger чтобы анимация из xaml главного окна срабатывала только при загрузке дочернего окна ?

upd

public void OpacityWindow()
    {
        MainWindow mainWindow = new MainWindow();
        Storyboard storyboard = new Storyboard();
        DoubleAnimation doubleAnimation = new DoubleAnimation();
        doubleAnimation.From = 0;
        doubleAnimation.To = 0.5;
        doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.5));
        storyboard.Children.Add(doubleAnimation);
        Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath(MainWindow.OpacityProperty));
        Storyboard.SetTargetName(doubleAnimation, mainWindow.Name);
        storyboard.Begin(this);
    }

В дочерней форме вызываю данный метод

  public AddPhones(Pearlphonebook p)
    {          
        InitializeComponent();
        this.Loaded += Window_Loaded;
  public void Window_Loaded(object sender, RoutedEventArgs e)
    {
        MainWindow mainWindow = new MainWindow();
        mainWindow.OpacityWindow();
    }

Ничего не происходит. Что я делаю не так?


Ответы (1 шт):

Автор решения: aepot

Для того чтобы поймать событие дочернего окна, нужно на него подписаться, точно так же как вы делаете это внутри дочернего окна.

Для начала, чтобы получить объект главного окна, например в дочернем, чтобы обращаться к методам и свойствам главного окна, не нужно его пересоздавать, это можно сделать вот так

MainWindow window = Application.Current.MainWindow as MainWindow;

А вот пример как подписаться на собыите дочернего окна в главном окне при его создании

OpacityWindow childWindow = new OpacityWindow();
childWindow.Loaded += OpacityWindow_Loaded

и реализовать стандартный обработчик события RoutedEvent, Visual Studio подскажет вам, как это сделать.

→ Ссылка