Aracılığıyla paylaş


Yapılandırılmış Gezinti Özeti

Tarafından barındırılan içerik bir XAML browser application (XBAP), bir Frame, ya da bir NavigationWindow oluşan paketi tarafından belirlenebilir sayfaların olduğu uniform resource identifiers (URIs) ve için gidilen köprü. Sayfaları ve içinde bunlar, köprüler tarafından tanımlandığı şekilde gezinilebilir yolları yapısını gezinti topoloji bilinir. Böyle bir topoloji çeşitli uygulama türleri, özellikle, belgeler içinde gezinmek karşılayacak. Bu tür uygulamalar için kullanıcının bir sayfadan başka bir sayfaya ya da sayfa hakkında başka bir şey bilmenize gerek kalmadan gezinebilirsiniz.

Ancak, bunlar arasında geçiş yaptığınızda bilmeniz gereken sayfaları uygulamaları vardır. Örneğin, bir kuruluştaki tüm çalışanları listelemek için bir sayfa olan bir İnsan Kaynakları uygulaması düşünün — "Liste çalışanlar" Sayfa. Bu sayfayı bir köprüyü tıklatarak yeni bir çalışan eklemek kullanıcılara da verebilir. Tıklatıldığında, bir "Add bir çalışana" Sayfa gider Yeni çalışanın ayrıntıları toplamak ve bunları "liste çalışanlara" dönmek için sayfa Yeni çalışan oluşturup listeyi güncelleştirmek için sayfa. Bu gezinti stilini, bazı işlemleri gerçekleştirmek ve yapısal programlama bilinen bir değer dönmek için bir yöntemi çağırmak için benzer. Bu şekilde gezinti bu stili olarak bilinen yapılandırılmış gezinti.

Page Sınıfı için destek uygulamak değildiryapılandırılmış gezinti. Bunun yerine, PageFunction<T> sınıfı türer Page ve yapılandırılmış gezinti için gerekli temel yapıları ile genişletiyor Bu konuda yapılandırılmış gezinti kullanarak kurmak gösterilmiştir PageFunction<T>.

Bu konu aşağıdaki bölümleri içerir.

  • Yapılandırılmış Gezinti
  • PageFunction ile yapılandırılmış Gezinti
  • Yapılandırılmış gezinti diğer türleri
  • İlgili Konular

Yapılandırılmış Gezinti

Bir sayfayı başka bir sayfaya yapılandırılmış bir Gezintide çağırır, bazıları veya tümü aşağıdaki davranışlardan biri gereklidir:

  • İsteğe bağlı olarak adlandırılan sayfa tarafından gerekli parametreleri geçirerek adlı sayfaya arama sayfasına gider.

  • Bir kullanıcı arama sayfasını kullanarak tamamlandığında adlı sayfa özellikle arama sayfası için isteğe bağlı olarak döndürür:

    • Nasıl arama sayfası (örneğin, bir kullanıcı bir Tamam veya İptal düğmesini basılı olup olmadığını) tamamlanıp tamamlanmadığını açıklayan durum bilgilerini döndürülüyor.

    • Kullanıcı (örneğin, yeni çalışan ayrıntıları) toplanmış olan o veriyor.

  • Arama sayfası adlı sayfaya döndüğünde, Aranan sayfayı gezinti geçmişindeki adlı sayfasından bir başka bir örneği yalıtmak için kaldırılır.

Bu davranışlar tarafından aşağıdaki şekilde gösterilmiştir.

Arayan sayfa ile aranan sayfa arasındaki akış

Bu davranışlar kullanarak uygulamanız bir PageFunction<T> adlı bir sayfa.

PageFunction ile yapılandırılmış Gezinti

Bu konuda tek bir kişiyle ilgili yapısal gezinti temel mekanizması uygulamak gösterilmiştir PageFunction<T>. Bu örnek bir Page çağrıları bir PageFunction<T> almak için bir String kullanıcı ve dönüş it. değeri

Arama sayfası oluşturma

Çağıran sayfasını bir PageFunction<T> ya da olabilir bir Page veya bir PageFunction<T>. Bu örnekte olduğu bir Pagegibi gösterilen aşağıdaki kodu.

<Page 
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="StructuredNavigationSample.CallingPage"
    WindowTitle="Calling Page" 
    WindowWidth="250" WindowHeight="150">


...


</Page>
Imports System.Windows ' RoutedEventArgs, RoutedEventHandler, Visibility
Imports System.Windows.Controls ' Page
Imports System.Windows.Navigation ' ReturnEventArgs

Namespace StructuredNavigationSample

Public Class CallingPage
    Inherits Page
    Public Sub New()
        Me.InitializeComponent()


...


End Sub


...


End Class

End Namespace
using System.Windows; // RoutedEventArgs, RoutedEventHandler, Visibility
using System.Windows.Controls; // Page
using System.Windows.Navigation; // ReturnEventArgs

namespace StructuredNavigationSample
{
    public partial class CallingPage : Page
    {
        public CallingPage()
        {
            InitializeComponent();


...


}


...


    }
}

Sayfa fonksiyon çağırmak için oluşturma

Arama sayfası olarak adlandırılan sayfayı toplamak ve kullanıcıdan verileri döndürmek için nedeni, PageFunction<T> , tür bağımsız değişkeni olduğunu adlı sayfa yapacaktır return değeri türünü belirleyen bir generic sýnýf olarak gerçekleştirilir Aşağıdaki kod adlı ilk uygulamasında gösterir sayfa kullanarak bir PageFunction<T>, hangi verir bir String.

<PageFunction
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    x:Class="StructuredNavigationSample.CalledPageFunction"
    x:TypeArguments="sys:String"
    Title="Page Function" 
    WindowWidth="250" WindowHeight="150">

  <Grid Margin="10">

    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto" />
      <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" />
      <RowDefinition />
    </Grid.RowDefinitions>

    <!-- Data -->
    <Label Grid.Column="0" Grid.Row="0">DataItem1:</Label>
    <TextBox Grid.Column="1" Grid.Row="0" Name="dataItem1TextBox"></TextBox>

    <!-- Accept/Cancel buttons -->
    <TextBlock Grid.Column="1" Grid.Row="1" HorizontalAlignment="Right">
      <Button Name="okButton" IsDefault="True" MinWidth="50">OK</Button>
      <Button Name="cancelButton" IsCancel="True" MinWidth="50">Cancel</Button>
    </TextBlock>

  </Grid>

</PageFunction>
Imports System ' String
Imports System.Windows ' RoutedEventArgs, RoutedEventHandler
Imports System.Windows.Navigation ' PageFunction

Namespace StructuredNavigationSample

Public Class CalledPageFunction
    Inherits PageFunction(Of String)
    Public Sub New()
        Me.InitializeComponent()
    End Sub


...


End Class

End Namespace
using System; // String
using System.Windows; // RoutedEventArgs, RoutedEventHandler
using System.Windows.Navigation; // PageFunction

namespace StructuredNavigationSample
{
    public partial class CalledPageFunction : PageFunction<String>
    {
        public CalledPageFunction()
        {
            InitializeComponent();
        }


...


    }
}

Bildiriminde, bir PageFunction<T> bildiriminde, benzer bir Page birlikte tür bağımsız değişkenleri. Kod örnekte görebileceðiniz gibi tür bağımsız değişkenleri belirtildiğinde XAML işaretleme, kullanarak x:TypeArguments niteliği ve arka planda, kullanarak standart genel tür bağımsız değişken sözdizimi.

Yalnızca kullanmak zorunda değilsiniz .NET Framework sınıfları olarak tür bağımsız değişkenleri. A PageFunction<T> denilen özel bir tür. abstracted etki alanına özgü veri toplamak için Aşağıdaki kod bir özel türü için tür bağımsız değişkeni olarak kullanın gösterilmiştir bir PageFunction<T>.

Public Class CustomType


...


End Class
namespace SDKSample
{
    public class CustomType
    {


...


    }
}
<PageFunction
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SDKSample" 
    x:Class="SDKSample.CustomTypePageFunction"
    x:TypeArguments="local:CustomType">


...


</PageFunction>
Partial Public Class CustomTypePageFunction
    Inherits System.Windows.Navigation.PageFunction(Of CustomType)
using System.Windows.Navigation; // PageFunction

namespace SDKSample
{
    public partial class CustomTypePageFunction : PageFunction<CustomType>
    {

Tür bağımsız değişkenleri PageFunction<T> sağlayan bir arama sayfası ve Aranan sayfa olduğu açıklanan arasındaki iletişimin temeliaşağıdaki bölümlerde.

Bildirimi ile tanımlanan türü göreceksiniz gibi bir PageFunction<T> verileri döndüren bir önemli rol oynayan bir PageFunction<T> arama sayfası.

Bir PageFunction çağırmak ve parametreleri iletmek

Sayfayı aramak için arama sayfası gerekir adlı sayfa oluştur ve onu kullanarak gidin Navigate yöntemi. Böylece, Aranan sayfa tarafından toplanan veriler için varsayılan değerleri gibi adlı sayfaya ilk veri geçirmek arama sayfası.

Aşağıdaki kod adlı arama sayfasından parametrelerini kabul etmek için varsayılan olmayan bir oluşturucu sayfası gösterir.

Imports System ' String
Imports System.Windows ' RoutedEventArgs, RoutedEventHandler
Imports System.Windows.Navigation ' PageFunction

Namespace StructuredNavigationSample

Public Class CalledPageFunction
    Inherits PageFunction(Of String)


...


Public Sub New(ByVal initialDataItem1Value As String)
    Me.InitializeComponent()


...


    ' Set initial value
    Me.dataItem1TextBox.Text = initialDataItem1Value
End Sub


...


End Class

End Namespace
using System; // String
using System.Windows; // RoutedEventArgs, RoutedEventHandler
using System.Windows.Navigation; // PageFunction

namespace StructuredNavigationSample
{
    public partial class CalledPageFunction : PageFunction<String>
    {


...


        public CalledPageFunction(string initialDataItem1Value)
        {
            InitializeComponent();



...


    // Set initial value
    this.dataItem1TextBox.Text = initialDataItem1Value;
}


...


    }
}

Aşağıdaki kod arama sayfası işleme gösterir Click olayı Hyperlink adlı sayfa oluşturmak ve onu geçmesi bir başlangıç dizesi değeri.

Imports System.Windows ' RoutedEventArgs, RoutedEventHandler, Visibility
Imports System.Windows.Controls ' Page
Imports System.Windows.Navigation ' ReturnEventArgs

Namespace StructuredNavigationSample

Public Class CallingPage
    Inherits Page
    Public Sub New()
        Me.InitializeComponent()
        AddHandler Me.pageFunctionHyperlink.Click, New RoutedEventHandler(AddressOf Me.pageFunctionHyperlink_Click)
    End Sub
    Private Sub pageFunctionHyperlink_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)


...


End Sub


...


End Class

End Namespace
using System.Windows; // RoutedEventArgs, RoutedEventHandler, Visibility
using System.Windows.Controls; // Page
using System.Windows.Navigation; // ReturnEventArgs

namespace StructuredNavigationSample
{
    public partial class CallingPage : Page
    {
        public CallingPage()
        {
            InitializeComponent();
            this.pageFunctionHyperlink.Click += new RoutedEventHandler(pageFunctionHyperlink_Click);
        }
        void pageFunctionHyperlink_Click(object sender, RoutedEventArgs e)
        {

            // Instantiate and navigate to page function
            CalledPageFunction CalledPageFunction = new CalledPageFunction("Initial Data Item Value");


...


}


...


    }
}
<Hyperlink Name="pageFunctionHyperlink">Call Page Function</Hyperlink>

Aranan sayfaya parametreleri geçirmek için gerekli değildir. Bunun yerine aşağıdakileri yapabilirsiniz:

Ancak, az sonra göreceğiniz gibi kod örneğini ve Aranan sayfa tarafından döndürülen verileri toplamak için Aranan sayfaya gitmek için kullanmaya devam. Bu nedenle, PageFunction<T> tutulan Canlı; gerekiyor Aksi durumda, sonraki gitmek için PageFunction<T>, WPF başlattığı PageFunction<T> kullanarak varsayılan kurucu.

Ancak Aranan sayfaya dönebilirsiniz önce arama sayfası tarafından alınan verilere dönmesi gerekir.

Görev sonucu ve görev verileri görevden bir arama sayfasına dönme

Bu örnekte çağrılan sayfasını kullanarak kullanıcı tamamladığında, Tamam veya iptal düğmesi adlı sayfaya dönmek gerekiyor basarak değeriyle. Arama sayfası arama sayfası adlı sayfa kullanıcıdan veri toplamak için kullanılan bu yana iki tür bilgi gerektirir:

  1. Olup kullanıcı (Tamam veya iptal düğmesi Bu örnekte basarak) adlı sayfayı iptal etti. Arama sayfası arama sayfası kullanıcıdan Topladığınız verileri işleme belirlemek de izin verir.

  2. Kullanıcı tarafından sağlanan verileri.

Bilgi, dönmek için PageFunction<T> uygulayan OnReturn yöntemi. Aşağıdaki kod, çağrı gösterilmiştir.

Imports System ' String
Imports System.Windows ' RoutedEventArgs, RoutedEventHandler
Imports System.Windows.Navigation ' PageFunction

Namespace StructuredNavigationSample

Public Class CalledPageFunction
    Inherits PageFunction(Of String)


...


    Private Sub okButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        ' Accept when Ok button is clicked
        Me.OnReturn(New ReturnEventArgs(Of String)(Me.dataItem1TextBox.Text))
    End Sub

    Private Sub cancelButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        ' Cancel
        Me.OnReturn(Nothing)
    End Sub
End Class

End Namespace
using System; // String
using System.Windows; // RoutedEventArgs, RoutedEventHandler
using System.Windows.Navigation; // PageFunction

namespace StructuredNavigationSample
{
    public partial class CalledPageFunction : PageFunction<String>
    {


...


        void okButton_Click(object sender, RoutedEventArgs e)
        {
            // Accept when Ok button is clicked
            OnReturn(new ReturnEventArgs<string>(this.dataItem1TextBox.Text));
        }

        void cancelButton_Click(object sender, RoutedEventArgs e)
        {
            // Cancel 
            OnReturn(null);
        }
    }
}

Bu örnekte, kullanıcı iptal düğmesi, değeri null döner için arama sayfası. Tamam düğmesine basılı bunun yerine, kullanıcı tarafından sağlanan dize değeri döndürülür. OnReturnolan bir protected virtual yöntemini çağıran için verileri arama sayfası. Verilerinizi genel bir örneğini paketlenmesi gerekir ReturnEventArgs<T> türü, türünü belirtir, tür bağımsız değişkeni değeri Result döndürür. Bildirirken, bu şekilde bir PageFunction<T> belirli tür bağımsız değişkeni ile belirten bir PageFunction<T> türü değişkeni belirtilen türünün bir örneği döndürür Bu örnekte, tür bağımsız değişkeni ve sonuç olarak, dönüş değeri türü olan String.

Zaman OnReturn olarak adlandırılan, arama sayfası gereksinimlerini, dönüş değerini alma herhangi bir yolla PageFunction<T>. Bu nedenle, PageFunction<T> uygulayan Return olay arama sayfaları için tanıtıcı. Zaman OnReturn olarak adlandırılan, Return oluşturulur, böylece arama sayfası kaydolması Return almak için bildirim.

Imports System.Windows ' RoutedEventArgs, RoutedEventHandler, Visibility
Imports System.Windows.Controls ' Page
Imports System.Windows.Navigation ' ReturnEventArgs

Namespace StructuredNavigationSample

Public Class CallingPage
    Inherits Page


...


    Private Sub pageFunctionHyperlink_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        ' Instantiate and navigate to page function
        Dim calledPageFunction As New CalledPageFunction("Initial Data Item Value")
        AddHandler calledPageFunction.Return, New ReturnEventHandler(Of String)(AddressOf Me.calledPageFunction_Return)
        MyBase.NavigationService.Navigate(calledPageFunction)
    End Sub
    Private Sub calledPageFunction_Return(ByVal sender As Object, ByVal e As ReturnEventArgs(Of String))

        Me.pageFunctionResultsTextBlock.Visibility = Windows.Visibility.Visible

        ' Display result
        Me.pageFunctionResultsTextBlock.Text = IIf((Not e Is Nothing), "Accepted", "Canceled")

        ' If page function returned, display result and data
        If (Not e Is Nothing) Then
            Me.pageFunctionResultsTextBlock.Text = (Me.pageFunctionResultsTextBlock.Text & ChrW(10) & e.Result)
        End If

    End Sub
End Class

End Namespace
using System.Windows; // RoutedEventArgs, RoutedEventHandler, Visibility
using System.Windows.Controls; // Page
using System.Windows.Navigation; // ReturnEventArgs

namespace StructuredNavigationSample
{
    public partial class CallingPage : Page
    {


...


        void pageFunctionHyperlink_Click(object sender, RoutedEventArgs e)
        {

            // Instantiate and navigate to page function
            CalledPageFunction CalledPageFunction = new CalledPageFunction("Initial Data Item Value");
            CalledPageFunction.Return += pageFunction_Return;
            this.NavigationService.Navigate(CalledPageFunction);
        }
        void pageFunction_Return(object sender, ReturnEventArgs<string> e)
        {
            this.pageFunctionResultsTextBlock.Visibility = Visibility.Visible;

            // Display result
            this.pageFunctionResultsTextBlock.Text = (e != null ? "Accepted" : "Canceled");

            // If page function returned, display result and data
            if (e != null)
            {
                this.pageFunctionResultsTextBlock.Text += "\n" + e.Result;
            }
        }
    }
}

Görev tamamlandığında görevin sayfaları kaldırma

Aranan bir sayfa döndürür ve kullanıcı adı verilen sayfa iptal olmadı, arama sayfası, kullanıcı tarafından sağlanan ve Aranan sayfasından da döndürülen verileri işleyecektir. Bu şekilde veri alma genellikle yalıtılmış bir etkinliktir; adlı sayfaya döndüğünde, arama sayfası oluşturmak ve daha fazla veri yakalamak için yeni bir arama sayfası için gitmek gerekiyor.

Ancak, aranan bir sayfa kaldırılır sürece Günlük, bir kullanıcı arama sayfasına geri önceki bir örneğine gitmek mümkün olacaktır. Olup bir PageFunction<T> içinde korunur Günlük tarafından belirlenen RemoveFromJournal özelliği. Varsayılan olarak, sayfa fonksiyon otomatik olarak ne zaman kaldırılan OnReturn olarak adlandırılan çünkü RemoveFromJournal ayarlanır true. Sayfa fonksiyon sonra gezinme geçmişini tutmak için OnReturn olarak adlandırılır, set RemoveFromJournal için false.

Yapılandırılmış gezinti diğer türleri

Bu konuda en temel işlevinin kullanımını göstermektedir bir PageFunction<T> çağrı/iade desteklemek üzere yapılandırılmış gezinti. Bu temel yapısal gezinti daha karmaşık türleri oluşturma olanağı sağlar.

Örneğin, bazen birden çok sayfaya bir arama sayfası kullanıcıdan yeterli veri toplamak için ya da bir görevi gerçekleştirmek için gereklidir. Birden çok sayfa kullanımı "Sihirbazı" adlandırılır.

Diğer durumlarda, uygulamaların etkin biçimde yapılandırılmış gezinti bağlıdır karmaşık gezinti yapıları olabilir. For more information, see Gezinti Topolojilerine Genel Bakış.

Ayrıca bkz.

Başvuru

PageFunction<T>

NavigationService

Kavramlar

Gezinti Topolojilerine Genel Bakış