Possiamo permettere alla pagina di navigare da solo. Basta definire un evento nel tuo usercontrol personalizzato e ascoltare l'evento nel suo genitore (la pagina).
Prendiamo il seguente come esempio:
- Creare un controllo utente personalizzato e mettere un pulsante su di esso a scopo di test.
- In evento clic del pulsante di test, aumentare l'evento per spostarsi nella pagina padre.
- Nella pagina padre, ascoltare l'evento UserControl e chiamare Frame.Navigate.
di MyControl Xaml: CodeBehind
<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>
di 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);
}
}
Naviga MainPage a SecondaPagina:
public MainPage()
{
this.InitializeComponent();
myControl.OnNavigateParentReady += myControl_OnNavigateParentReady;
}
private void MyControl_OnNavigateParentReady(object source, EventArgs e)
{
Frame.Navigate(typeof(SecondPage));
}
fonte
2015-08-28 01:35:56
Fantastico! Grazie per questo. Ha funzionato come un fascino. – kgyts
Ottiene un nullpointer su 'OnNavigateParentReady (this, null);'? – Evilunclebill
Avevo bisogno di cambiare 'evento pubblico' in' evento statico pubblico', in modo da poter usare questa soluzione in un 'UserControl' all'interno di un' DataTemplate' all'interno di un 'GridView.ItemTemplate' all'interno di un' GridView' all'interno di una 'Grid'' all'interno di un 'Page' ... Grazie per un'ottima soluzione. – dav1dsm1th