Salut !
Je cherche un moyen de Binder un label ou autre chose sur le titre d'une page affichée dans un Frame.
Peut-on faire cela en "XAML pur" ou faut-il nécessairement passer par du code ?
Version imprimable
Salut !
Je cherche un moyen de Binder un label ou autre chose sur le titre d'une page affichée dans un Frame.
Peut-on faire cela en "XAML pur" ou faut-il nécessairement passer par du code ?
Ca, ca marche:
A+Code:
1
2
3
4 <Page x:Name="MyPage" Title="Mon Titre" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > <Label Content="{Binding ElementName=MyPage, Path=Title}" /> </Page>
Oui mais dans ton cas le label est contenu dans la frame, moi, je l'ai pas précisé, le label en question se trouve en dehors de la page (page hote) ou pour être plus précis dans la frame elle-même (barre de titre de la frame) dont j'ai redéfini le design via un ControlTemplate.
Le but est donc de faire quelquechose du genre :
Code:
1
2
3
4
5
6
7
8 <ControlTemplate x:Type="MaFrame" x:Target="Frame"> <Grid> .... <Label Content="{Binding Quelquechose}"/> <ContentPresenter/> </Grid> </ControlTemplate>
Dans ce cas, je pense que tu vas devoir surcharger OnApplyTemplate pour faire ton Binding....
Bon finalement le seul moyen que j'ai trouvé pour résoudre le problème est de superposer une Frame et un Label (pour le titre).
L'astuce consiste ensuite à écrire un peu de code pour le traitement de l'événement Navigated de la Frame et de positionner le contenu du titre en fonction de ce qu'il y a dans les eventArgs (avec un gros cast de la mort du content en page).
Coté XAML cela nous donne donc :
et côté C# on a ça :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <Grid> <Grid.RowDefinitions> <RowDefinition Height="22"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Frame Grid.Row="0" Grid.RowSpan="2" Navigated="NavigationService_Navigated" Source="Page1.xaml" NavigationUIVisibility="Visible" /> <Label Grid.Row="0" x:Name="TitreImage" Content="Titre de la page" HorizontalAlignment="Center"/> </Grid>
C'est moche mais ça marche et pour le moment j'ai pas trouvé mieux.Code:
1
2
3
4
5 private void NavigationService_Navigated(object sender, NavigationEventArgs e) { TitreImage.Content = ((Page)e.Content).Title; }
Maintenant si quelqu'un avait une solution 100% XAML je suis preneur. J'essaye de vraiment découpler le code métier du graphisme.
Voilà, bonne nuit 8-)
Oulà désolé Thomas j'avais pas vu ta réponse avant de poster :oops:
Euh le OnApplyTemplate je connais pas trop mais bon je vais supposer (d'après l'aide) que l'événement est déclenché au chargement du template mais je vois pas trop comment ça marche :roll:
OnApplyTemplate est déclenché.... au moment où le template est appliqué :)