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 шт):
Для того чтобы поймать событие дочернего окна, нужно на него подписаться, точно так же как вы делаете это внутри дочернего окна.
Для начала, чтобы получить объект главного окна, например в дочернем, чтобы обращаться к методам и свойствам главного окна, не нужно его пересоздавать, это можно сделать вот так
MainWindow window = Application.Current.MainWindow as MainWindow;
А вот пример как подписаться на собыите дочернего окна в главном окне при его создании
OpacityWindow childWindow = new OpacityWindow();
childWindow.Loaded += OpacityWindow_Loaded
и реализовать стандартный обработчик события RoutedEvent, Visual Studio подскажет вам, как это сделать.