it-swarm.com.ru

UWP Доступ к фрейму для навигации по странице через Usercontrol объект?

В настоящее время я разрабатываю приложение UWP, которое включает несколько объектов Usercontrol внутри карты ( с использованием Windows.UI.Xaml.Navigation ).

с этими объектами Usercontrol я иногда требую, чтобы пользователь мог нажимать кнопку в объектах и ​​переходить на новую страницу, единственная проблема в том, что я не могу получить доступ к фрейму страницы, чтобы иметь возможность использовать 

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

метод. Как бы я поступил об этом и/или есть ли альтернативы? Я застрял на этом большую часть дня!

Спасибо заранее за любую помощь, которую вы, ребята, можете предложить!

11
kgyts

Мы можем позволить странице перемещаться самостоятельно. Просто определите событие в вашем пользовательском элементе управления и прослушайте событие в его родительском элементе (на странице).

Возьмите следующее в качестве примера:

  1. Создайте пользовательский элемент управления и поместите на него кнопку для целей тестирования.
  2. В событии щелчка кнопки тестирования поднимите событие, чтобы перейти на родительскую страницу.
  3. На родительской странице прослушайте событие UserControl и вызовите Frame.Navigate.

MyControl's 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>

CodeBehind 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);
    }


}

Перейдите с MainPage на 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

Вы можете получить ссылку на фрейм из содержимого текущего окна. В коде вашего пользовательского элемента управления попробуйте:

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

Или с помощью Cast =>

((Рамка) Window.Current.Content) .Navigate (TypeOf (Views.SecondPage));

0
tvlada73