Je développe actuellement une application UWP qui implique plusieurs objets Usercontrol dans une carte ( sous Windows.UI.Xaml.Navigation ).
avec ces objets Usercontrol, je demande parfois à l'utilisateur de pouvoir appuyer sur un bouton des objets et d'accéder à une nouvelle page. Le seul problème est qu'il me semble impossible d'accéder au cadre de la page pour pouvoir utiliser le
Frame.Navigate(typeof([page]));
méthode. Comment pourrais-je m'y prendre et/ou y a-t-il des alternatives? J'ai été coincé dessus presque toute la journée!
Merci d'avance pour toute aide que vous pouvez offrir!
Nous pouvons laisser la page se naviguer. Définissez simplement un événement dans votre contrôle utilisateur personnalisé et écoutez-le dans son parent (la page).
Prenons l'exemple suivant:
Xaml de MyControl:
<UserControl
x:Class="App6.MyControl"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
xmlns:local="using:App6"
xmlns:d="http://schemas.Microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<Grid>
<Button x:Name="testbtn" Margin="168,134,0,134" Click="testbtn_Click">test</Button>
</Grid>
</UserControl>
CodeBehind de MyControl:
public sealed partial class MyControl : UserControl
{
public delegate void MyEventHandler(object source, EventArgs e);
public event MyEventHandler OnNavigateParentReady;
public MyControl()
{
this.InitializeComponent();
}
private void testbtn_Click(object sender, RoutedEventArgs e)
{
OnNavigateParentReady(this, null);
}
}
Naviguer de MainPage vers SecondPage:
public MainPage()
{
this.InitializeComponent();
myControl.OnNavigateParentReady += myControl_OnNavigateParentReady;
}
private void MyControl_OnNavigateParentReady(object source, EventArgs e)
{
Frame.Navigate(typeof(SecondPage));
}
Vous pouvez obtenir une référence au cadre à partir du contenu de la fenêtre en cours. Dans le code de votre contrôle utilisateur derrière, essayez:
Frame navigationFrame = Window.Current.Content as Frame;
navigationFrame.Navigate(typeof([page]));
Ou, avec Cast =>
((Frame) Window.Current.Content) .Navigate (typeof (Views.SecondPage));