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 ?
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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....
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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 : 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 <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 : Sélectionner tout - Visualiser dans une fenêtre à part
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![]()
Oulà désolé Thomas j'avais pas vu ta réponse avant de poster![]()
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![]()
OnApplyTemplate est déclenché.... au moment où le template est appliqué![]()
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Partager