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.
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:
Arama sayfasından:
Aranan örneğini PageFunction<T> kullanarak varsayılan kurucu.
Parametrelerde saklamak Properties.
Aranan gidin PageFunction<T>.
Aranan'den PageFunction<T>:
- Almak ve depolanan parametreleri kullanın Properties.
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:
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.
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ış.