Communiquer avec les élements d'une frame
(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:
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:
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:
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