web-dev-qa-db-ja.com

オブジェクトをUsercontrolを介してページナビゲーションのフレームにアクセスするUWP?

私は現在、マップ内のいくつかのUsercontrolオブジェクトを含むUWPアプリケーションを開発しています(Windows.UI.Xaml.Navigationを使用)。

これらのUsercontrolオブジェクトを使用すると、オブジェクトのボタンを押して新しいページに移動できるようにユーザーに要求することがあります。唯一の問題は、ページのフレームにアクセスして、

Frame.Navigate(typeof([page])); 

方法。これについてどうすればよいですか、および/または代替案はありますか?私は一日のほとんどこれで立ち往生しています!

皆さんが提供できる支援を事前にありがとう!

13
kgyts

ページにそれ自体をナビゲートさせることができます。カスタムユーザーコントロールでイベントを定義し、その親(ページ)でイベントをリッスンするだけです。

例として次の例を考えてみましょう。

  1. カスタムユーザーコントロールを作成し、テスト用にボタンを配置します。
  2. テストボタンのクリックイベントで、イベントを発生させて親ページに移動します。
  3. 親ページで、UserControlのイベントをリッスンし、Frame.Navigateを呼び出します。

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

現在のウィンドウのコンテンツからフレームへの参照を取得できます。ユーザーコントロールの背後にあるコードで、次のことを試してください。

Frame navigationFrame = Window.Current.Content as Frame;
navigationFrame.Navigate(typeof([page]));
3
meanme

または、Cast =>

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

0
tvlada73