Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir XAML tarayıcı uygulaması (XBAP), Frameveya NavigationWindow tarafından barındırılabilen içerik, paket tekdüzen kaynak tanımlayıcıları (URI' ler) tarafından tanımlanıp köprülerle gidilebilen sayfalardan oluşur. Hyperlinkler tarafından belirlenen sayfaların yapısı ve bu sayfalarda gezinme yöntemleri, gezinme topolojisi olarak bilinir. Böyle bir topoloji, özellikle belgelerde gezinen çeşitli uygulama türlerine uygundur. Bu tür uygulamalar için kullanıcı, herhangi bir sayfanın diğer sayfa hakkında bilgi sahibi olması gerekmeden bir sayfadan diğerine gidebilir.
Ancak, diğer uygulama türlerinde, aralarında ne zaman gezinti yapıldığını bilmesi gereken sayfalar vardır. Örneğin, bir kuruluştaki tüm çalışanları listelemek için bir sayfası olan bir insan kaynakları uygulamasını ("Çalışanları Listele" sayfası) düşünün. Bu sayfa, kullanıcıların köprüye tıklayarak yeni bir çalışan eklemesine de izin verebilir. Tıklandığında, sayfa yeni çalışanın ayrıntılarını toplamak ve yeni çalışanı oluşturmak ve listeyi güncelleştirmek için "Çalışanları Listele" sayfasına geri göndermek için bir "Çalışan Ekle" sayfasına gider. Bu gezinti stili, bazı işlemler gerçekleştirmek ve yapılandırılmış programlama olarak bilinen bir değer döndürmek için bir yöntem çağırmaya benzer. Bu nedenle, bu gezinti stili yapılandırılmış gezintiolarak bilinir.
Page sınıfı yapılandırılmış gezinti desteği uygulamaz. Bunun yerine, PageFunction<T> sınıfı Page'den türetilmiştir ve yapılandırılmış gezinti için gerekli temel yapılarla genişletilmiştir. Bu konu, PageFunction<T>kullanarak yapılandırılmış gezintinin nasıl oluşturulduğunu gösterir.
Yapılandırılmış Navigasyon
Bir sayfa yapılandırılmış gezintide başka bir sayfayı çağırdığında, aşağıdaki davranışların bir kısmı veya tümü gereklidir:
Çağıran sayfa, çağrılan sayfaya gider ve isteğe bağlı olarak çağrılan sayfanın gerektirdiği parametreleri geçirir.
Kullanıcı arama sayfasını kullanmayı tamamladığında çağrılan sayfa, isteğe bağlı olarak özel olarak arama sayfasına döner:
Arama sayfasının nasıl tamamlandığını açıklayan durum bilgileri döndürüldü (örneğin, bir kullanıcının Tamam düğmesine mi yoksa İptal düğmesine mi bastığı).
Kullanıcıdan toplanan verileri (örneğin, yeni çalışan ayrıntıları) döndürme.
Çağrılan sayfa çağrılan sayfaya geri döndüğünde, çağrılan sayfanın bir örneğini başka bir sayfadan yalıtmak için çağrılan sayfa gezinti geçmişinden kaldırılır.
Bu davranışlar aşağıdaki şekilde gösterilmiştir:
Çağrılan sayfa olarak bir PageFunction<T> kullanarak bu davranışları uygulayabilirsiniz.
PageFunction ile Yapılandırılmış Gezinti
Bu konu başlığında, tek bir PageFunction<T>içeren yapılandırılmış gezintinin temel mekaniğinin nasıl uygulandığı gösterilmektedir. Bu örnekte, bir Page, kullanıcıdan bir PageFunction<T> değeri almak ve bunu geri döndürmek için bir String çağırır.
Arama Sayfası Oluşturma
PageFunction<T> çağıran sayfa Page veya PageFunction<T>olabilir. Bu örnekte, aşağıda verilen kodda görüldüğü üzere bir Pagekarakteri bulunmaktadır.
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="StructuredNavigationSample.CallingPage"
WindowTitle="Calling Page"
WindowWidth="250" WindowHeight="150">
</Page>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
namespace StructuredNavigationSample
{
public partial class CallingPage : Page
{
public CallingPage()
{
InitializeComponent();
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Navigation
Namespace StructuredNavigationSample
Public Class CallingPage
Inherits Page
Public Sub New()
Me.InitializeComponent()
}
End Sub
}
}
End Class
End Namespace
Çağrılacak Sayfa İşlevi Oluşturma
Çağrılan sayfa, kullanıcıdan veri toplamak ve döndürmek için çağrılan sayfayı kullanabildiğinden, PageFunction<T> türü bağımsız değişkeni çağrılan sayfanın döndüreceği değerin türünü belirten genel bir sınıf olarak uygulanır. Aşağıdaki kod, bir PageFunction<T>kullanarak, Stringdöndüren çağrılan sayfanın başlangıç uygulamasını gösterir.
<PageFunction
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://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>
using System;
using System.Windows;
using System.Windows.Navigation;
namespace StructuredNavigationSample
{
public partial class CalledPageFunction : PageFunction<String>
{
public CalledPageFunction()
{
InitializeComponent();
}
Imports System.Windows
Imports System.Windows.Navigation
Namespace StructuredNavigationSample
Public Class CalledPageFunction
Inherits PageFunction(Of String)
Public Sub New()
Me.InitializeComponent()
End Sub
}
}
End Class
End Namespace
PageFunction<T> bildirimi, tür argümanlarının eklenmesiyle bir Page bildirimine benzer. Kod örneğinden de anlaşılacağı üzere, tür bağımsız değişkenleri XAML işaretlemesinde x:TypeArguments özniteliği kullanılarak ve arka planda kodda standart genel tür bağımsız değişkeni söz dizimi kullanılarak belirtilmektedir.
Tür bağımsız değişkenleri olarak yalnızca .NET Framework sınıflarını kullanmanız gerekmez. Özel tür olarak soyutlanmış etki alanına özgü verileri toplamak için bir PageFunction<T> çağrılabilir. Aşağıdaki kod, bir PageFunction<T>için tip argümanı olarak özel bir tipin nasıl kullanılacağını gösterir.
namespace SDKSample
{
public class CustomType
{
Public Class CustomType
}
}
End Class
<PageFunction
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SDKSample"
x:Class="SDKSample.CustomTypePageFunction"
x:TypeArguments="local:CustomType">
</PageFunction>
using System.Windows.Navigation;
namespace SDKSample
{
public partial class CustomTypePageFunction : PageFunction<CustomType>
{
Partial Public Class CustomTypePageFunction
Inherits System.Windows.Navigation.PageFunction(Of CustomType)
}
}
End Class
PageFunction<T> için bağımsız tür değişkenleri, aşağıdaki bölümlerde ele alınan bir çağrı sayfası ile çağrılan sayfa arasındaki iletişimin temelini sağlar.
Gördüğünüz gibi, bir PageFunction<T> bildirimiyle tanımlanan tür, verileri bir PageFunction<T>'den çağrılan sayfaya döndürmede önemli bir rol oynar.
Sayfa İşlevi Çağırma ve Parametre Aktarımı
Bir sayfayı çağırmak için, çağıran sayfa, çağrılan sayfanın örneğini oluşturmalı ve Navigate yöntemini kullanarak ona gitmelidir. Bu, çağrılan sayfanın çağrılan sayfa tarafından toplanan verilerin varsayılan değerleri gibi ilk verileri çağrılan sayfaya geçirmesine olanak tanır.
Aşağıdaki kod, çağrılan sayfadan parametreleri kabul etmek için parametresiz oluşturucuya sahip çağrılan sayfayı gösterir.
using System;
using System.Windows;
using System.Windows.Navigation;
namespace StructuredNavigationSample
{
public partial class CalledPageFunction : PageFunction<String>
{
Imports System.Windows
Imports System.Windows.Navigation
Namespace StructuredNavigationSample
Public Class CalledPageFunction
Inherits PageFunction(Of String)
public CalledPageFunction(string initialDataItem1Value)
{
InitializeComponent();
Public Sub New(ByVal initialDataItem1Value As String)
Me.InitializeComponent()
// Set initial value
this.dataItem1TextBox.Text = initialDataItem1Value;
}
' Set initial value
Me.dataItem1TextBox.Text = initialDataItem1Value
End Sub
}
}
End Class
End Namespace
Aşağıdaki kod, Click'in Hyperlink olayını işleyerek çağrılan sayfanın örneğini oluşturup ona bir başlangıç dize değeri geçirmek için çağrı sayfasını gösterir.
<Hyperlink Name="pageFunctionHyperlink">Call Page Function</Hyperlink>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
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");
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Navigation
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
Çağrılan sayfaya parametre geçirmeniz gerekmez. Bunun yerine aşağıdakileri yapabilirsiniz:
Arama sayfasından:
Parametresiz oluşturucuyu kullanarak çağrılan PageFunction<T> örneğini oluşturun.
parametreleri Propertiesiçinde depolayın.
PageFunction<T>adlı yere gidin.
Çağrılan PageFunction<T>'dan:
- Propertiesiçinde depolanan parametreleri alın ve kullanın.
Ancak kısa bir süre sonra göreceğiniz gibi, çağrılan sayfanın döndürdiği verileri toplamak için örnek oluşturup çağrılan sayfaya gitmek için kod kullanmanız gerekir. Bu nedenle PageFunction<T> canlı tutulmalıdır; aksi takdirde, bir sonraki kez PageFunction<T>'e gittiğinizde, WPF parametresiz oluşturucuyu kullanarak PageFunction<T> örnek oluşturur.
Ancak çağrılan sayfanın döndürülebilmesi için çağrı sayfası tarafından alınabilecek verileri döndürmesi gerekir.
Görev Sonucunu ve Görev Verilerini Bir Görevden Arama Sayfasına Döndürme
Kullanıcı çağrılan sayfayı kullanmayı bitirdikten sonra Tamam veya İptal düğmelerine basarak bu örnekte belirtilen sayfanın döndürülmesi gerekir. Çağrı sayfası, kullanıcıdan veri toplamak için çağrılan sayfayı kullandığından, çağrı sayfası iki tür bilgi gerektirir:
Kullanıcının çağrılan sayfayı iptal edip etmediği (bu örnekte Tamam düğmesine veya İptal düğmesine basarak). Bu, çağrı sayfasının, çağrı sayfasının kullanıcıdan topladığı verilerin işlenip işlenmeyeceğini belirlemesine olanak tanır.
Kullanıcı tarafından sağlanan veriler.
Bilgi döndürmek için PageFunction<T>OnReturn yöntemini uygular. Aşağıdaki kod onun nasıl çağrılacağını göstermektedir.
using System;
using System.Windows;
using System.Windows.Navigation;
namespace StructuredNavigationSample
{
public partial class CalledPageFunction : PageFunction<String>
{
Imports System.Windows
Imports System.Windows.Navigation
Namespace StructuredNavigationSample
Public Class CalledPageFunction
Inherits PageFunction(Of 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);
}
}
}
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
Bu örnekte, bir kullanıcı İptal düğmesine basarsa, çağrı sayfasına null değeri döndürülür. Bunun yerine Tamam düğmesine basılırsa, kullanıcı tarafından sağlanan dize değeri döndürülür.
OnReturn, verilerinizi çağrı sayfasına döndürmek için çağırdığınız bir protected virtual yöntemidir. Verilerinizin, ReturnEventArgs<T>'in döndüreceği değerin türünü belirleyen tür bağımsız değişkenine sahip genel Result türünün bir örneğinde paketlenmesi gerekir. Bu şekilde, belirli bir tür bağımsız değişkenine sahip bir PageFunction<T> bildirdiğinizde, PageFunction<T> tür bağımsız değişkeni tarafından belirtilen türün bir örneğini döndüreceğini belirtirsiniz. Bu örnekte tür bağımsız değişkeni ve dolayısıyla dönüş değeri Stringtüründedir.
OnReturn çağrıldığında, çağrı sayfası PageFunction<T>dönüş değerini almak için bir yönteme ihtiyaç duyar. Bu nedenle, PageFunction<T> çağıran sayfaları işlemek için Return olayını uygular. OnReturn çağrıldığında Return aktif hale getirilir, böylece çağrı sayfası bildirimi almak için Return ile kaydolabilir.
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
namespace StructuredNavigationSample
{
public partial class CallingPage : Page
{
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Navigation
Namespace StructuredNavigationSample
Public Class CallingPage
Inherits 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;
}
}
}
}
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
Görev Tamamlandığında Görev Sayfalarını Kaldırma
Çağrılan sayfa geri döndüğünde ve kullanıcı çağrılan sayfayı iptal etmediğinde, çağıran sayfa kullanıcı tarafından sağlanan ve çağrılan sayfadan döndürülen verileri işler. Bu şekilde veri alımı genellikle yalıtılmış bir etkinliktir; çağrılan sayfa geri döndüğünde, çağrı sayfasının daha fazla veri yakalamak için yeni bir arama sayfası oluşturması ve bu sayfaya gitmesi gerekir.
Ancak, çağrılan bir sayfa günlükten kaldırılmadığı sürece, kullanıcı arama sayfasının önceki bir örneğine geri dönebilir. Günlükte bir PageFunction<T> tutulup tutulmadığı RemoveFromJournal özelliği tarafından belirlenir. varsayılan olarak, OnReturnRemoveFromJournalolarak ayarlandığından true çağrıldığında bir sayfa işlevi otomatik olarak kaldırılır.
OnReturn çağrıldıktan sonra sayfa işlevini gezinti geçmişinde tutmak için RemoveFromJournalfalseolarak ayarlayın.
Diğer Yapılandırılmış Gezinti Türleri
Bu konu, arama/dönüş yapılandırılmış gezintiyi desteklemek için PageFunction<T>'ın en temel kullanımını göstermektedir. Bu temel size daha karmaşık türde yapılandırılmış gezintiler oluşturma olanağı sağlar.
Örneğin, bazen bir kullanıcıdan yeterli veri toplamak veya bir görev gerçekleştirmek için bir çağrı sayfası için birden çok sayfa gerekir. Birden çok sayfa kullanımına "sihirbaz" denir.
Diğer durumlarda, uygulamaların etkili bir şekilde çalışması için yapılandırılmış gezintiye bağımlı karmaşık gezinti topolojileri olabilir. Daha fazla bilgi için bkz. Gezinti Topolojilerine Genel Bakış.
Ayrıca bakınız
.NET Desktop feedback