How to load pages inside the presentation settings of the content of the bitmap image in UWP?

Here is my MainPage.xaml

<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:BibleApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Domain="using:BibleApp.Domain"    
x:Class="BibleApp.MainPage">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <RelativePanel>
            <Button Name="HamburgerButton" 
                    FontFamily="Segoe MDL2 Assets" 
                    Content="&#xE14C;" FontSize="14" 
                    Click="HamburgerButton_Click"/>
        </RelativePanel>

        <SplitView Name="MySplitView" 
                   Grid.Row="1" 
                   DisplayMode="CompactOverlay" 
                   OpenPaneLength="200" 
                   CompactPaneLength="34" 
                   HorizontalAlignment="Left">
            <SplitView.Pane>
                <ListBox Name="IconsListBox" SelectionMode="Single" SelectionChanged="IconsListBox_SelectionChanged">
                    <ListBoxItem Name="Biblia">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xE128;" FontSize="18"/>
                            <TextBlock Text="Bíblia" FontSize="12" Margin="15,0,0,0"/>
                        </StackPanel>
                    </ListBoxItem>

                    <ListBoxItem Name="PesquisarPalavraChave">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xE11A;" FontSize="18"/>
                            <TextBlock Text="Pesquisar palavra chave" FontSize="12" Margin="15,0,0,0"/>
                        </StackPanel>
                    </ListBoxItem>

                    <ListBoxItem Name="PesquisarAssunto">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xE773;" FontSize="18"/>
                            <TextBlock Text="Pesquisar assunto" FontSize="12" Margin="15,0,0,0"/>
                        </StackPanel>
                    </ListBoxItem>
                </ListBox>
            </SplitView.Pane>
            <SplitView.Content>
                <Frame Name="MyFrame"/>
            </SplitView.Content>
        </SplitView>
    </Grid>
</Page>

Here is the code for MainPage:

private void IconsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MyFrame = this.Frame;
    if (Biblia.IsSelected) { Frame.Navigate(typeof(View.BiblePage), bible);}
    else if (PesquisarPalavraChave.IsSelected) {Frame.Navigate(typeof(View.SearchWordPage));}
    else if (PesquisarAssunto.IsSelected) { Frame.Navigate(typeof(View.SearchMatterPage)); }    
}

Here is the OnNavigatedTo Bible page:

protected override void OnNavigatedTo(NavigationEventArgs e)
{            
    bible = (Bible)e.Parameter;
}

The problem is that the BiblePage event script “OnNavigatedTo” does not start, so I can’t transfer my Bible variable from MainPage to BiblePage.

When I do this procedure outside of the splitview content, it works fine.

How can I load xaml pages inside the transfer parameters of the contents of the shared MainPage section?

+4
source share
4 answers

// .

1/MainPage.xaml

<Page
x:Class="App3.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App3"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <SplitView DisplayMode="Inline" Background="Black" IsPaneOpen="True" OpenPaneLength="360" >
        <SplitView.Pane>
            <Button Content="GoToPage" Click="GoToPage_Click" Foreground="White"/>
        </SplitView.Pane>
        <SplitView.Content>
            <Frame x:Name="contentFrame"/>
        </SplitView.Content>
    </SplitView>
</Grid>
</Page>

2/MainPage.xaml.cs

namespace App3
{
/// <summary>
/// Une page vide peut être utilisée seule ou constituer une page de destination au sein d'un frame.
/// </summary>
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }

    private void GoToPage_Click(object sender, RoutedEventArgs e)
    {
        contentFrame.Navigate(typeof(SecondPage), new Params() { MyProperty = 42 });
    }
}

public class Params
{
    public int MyProperty { get; set; }
}
}

3/SecondPage.xaml.cs

namespace App3
{

public sealed partial class SecondPage : Page
{
    public SecondPage()
    {
        this.InitializeComponent();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        Params result = (Params)e.Parameter;
        base.OnNavigatedTo(e);  
    }
}
}
+4

x:Name Name XAML, nama .

.xaml, .xaml.cs , : var frame=this.MyFrame;

, this.Frame Frame, page, RootFrame. , , :

  • ;
  • , : MyFrame.Navigate(typeof(NewPage),null);
  • , ;
+2

, , .

GitHub : https://github.com/mikoskinen/uwp-frame-datapassing.

, , OnNavigatedTo, SecondPage. Windows 10, .

Debugger

, :

  • ,
  • , XMLPage XAML x: Class.
+2

In fact, I had a piece of code running on my BiblePage constructor that tried to use the variable passed as a parameter before it was called by the "OnNavigatedTo" event.

Thus, I received an error message for another function before the OnNavigatedTo event is fired.

Many thanks.

+1
source

Source: https://habr.com/ru/post/1619944/


All Articles