(Mon titre n'est pas très clair, ne vous y fiez pas.)
Je voudrais initialiser un délégate depuis une mon XAML parent.
Mon XAML parent (simplifié) contient :
Le XAML "Tab_habitation" est quelconque (le problème ne vient pas de là) et son XAML.cs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <Window x:Class="MONAPPLI.CParent" 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/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid > <TabControl Name="Tab_Onglets" Margin="0,0,204,22" IsSynchronizedWithCurrentItem="True"> <TabItem Name="Onglet_Accueil" Header="Accueil"> <Frame Source="CPage_accueil.xaml" Name="OPage_accueil" /> </TabItem> <TabItem Name="Onglet_habitation" Header="Lieu d'habitation"> <Frame Source="CPage_habitation.xaml" Name="OPage_habitation" /> </TabItem> </TabControl> </Grid> </Window>
Quant à, maintenant, mon XAML.cs Parent, c'est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 namespace MONAPPLI { public partial class CPage_habitation : Page { public CPage_habitation() { InitializeComponent(); } public delegate void NewLogEventHandler(int importance, string log); public event NewLogEventHandler NewLog; private void write_to_log(int importance, string log) { if (NewLog != null) NewLog(importance, log); } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 using ...; namespace MONAPPLI { public partial class CParent : Window { public CParent() { InitializeComponent(); Show(); write_to_log(3, "Chargée"); OTab_habitation.Loaded += Onglet_habitation_Initialized; } private void write_to_log(int importance, string log) { MessageBox.Show("Debug : " + log); } private void Onglet_habitation_Initialized(object sender, EventArgs e) { write_to_log(2, "Onglet Habitation Chargée"); OTab_habitation.NewLog += write_to_log; } } }
Et maintenant THE question : pourquoi la ligne en gras et rose me met une erreur ?
(L'erreur qu'il me met est que NewLog n'exiterait pas dans OTab_habitation et si je commente cette ligne le message de Debug "Onglet Habitation Chargée" apparait bien au moment de changer d'onglet.)
Puis si vous vous demandez pourquoi je chercher à faire un delegate, la raison simplement (qu'entres autres !) je voudrai desactiver/activer les onglets en fonction de conditions définies dans les Frames (CPage_habitation, CPage_accueil, etc) hors je ne peux pas acceder aux propriétés des onglets depuis une Class enfant sur une Class parent sans utiliser de delegate ou de timer à ma connaissance (mais si vous connaissez un autre moyen, je suis tout ouie).
Cordialement,
Gomoz
Partager