web-dev-qa-db-fra.com

UWP Accès au cadre pour la navigation de page dans Usercontrol un objet?

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!

11
kgyts

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:

  1. Créez un contrôle utilisateur personnalisé et placez un bouton dessus à des fins de test.
  2. Dans l'événement de clic du bouton de test, déclenchez l'événement pour naviguer dans la page parent.
  3. Dans la page Parent, écoutez l'événement UserControl et appelez Frame.Navigate.

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));
    }
11
Alan Yao - MSFT

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]));
2
meanme

Ou, avec Cast =>

((Frame) Window.Current.Content) .Navigate (typeof (Views.SecondPage));

0
tvlada73