私は現在、マップ内のいくつかのUsercontrolオブジェクトを含むUWPアプリケーションを開発しています(Windows.UI.Xaml.Navigationを使用)。
これらのUsercontrolオブジェクトを使用すると、オブジェクトのボタンを押して新しいページに移動できるようにユーザーに要求することがあります。唯一の問題は、ページのフレームにアクセスして、
Frame.Navigate(typeof([page]));
方法。これについてどうすればよいですか、および/または代替案はありますか?私は一日のほとんどこれで立ち往生しています!
皆さんが提供できる支援を事前にありがとう!
ページにそれ自体をナビゲートさせることができます。カスタムユーザーコントロールでイベントを定義し、その親(ページ)でイベントをリッスンするだけです。
例として次の例を考えてみましょう。
MyControlのXaml:
<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>
MyControlのCodeBehind:
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);
}
}
MainPageをSecondPageに移動します。
public MainPage()
{
this.InitializeComponent();
myControl.OnNavigateParentReady += myControl_OnNavigateParentReady;
}
private void MyControl_OnNavigateParentReady(object source, EventArgs e)
{
Frame.Navigate(typeof(SecondPage));
}
現在のウィンドウのコンテンツからフレームへの参照を取得できます。ユーザーコントロールの背後にあるコードで、次のことを試してください。
Frame navigationFrame = Window.Current.Content as Frame;
navigationFrame.Navigate(typeof([page]));
または、Cast =>
((Frame)Window.Current.Content).Navigate(typeof(Views.SecondPage));