(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 :

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>
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
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);
            }
        }
    }
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
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