Aracılığıyla paylaş


Gezintiye Genel Bakış

Windows Presentation Foundation (WPF)kullanılabilir tarayıcı stil gezinti uygulamaları iki tür destekler: tek başına çalışan uygulamaları ve XAML browser applications (XBAPs). Paket içeriği gezinme, WPF sağlayan Page sınıfa Birinden gidebilirsiniz Page diğerine hazırlanmasına, kullanarak bir Hyperlink, veya programlı olarak kullanarak NavigationService. WPF dan gittiğiniz sayfaları unutmayın ve bunları geri gitmek için günlük kullanır.

Page, Hyperlink, NavigationService, ve günlük form çekirdeği tarafından sunulan gezinti desteği, WPF. Bu genel bakış, gevşek için Gezinti içeren Gelişmiş gezinti desteği kapsayan önce bu özelliklerin ayrıntılı anlatıyor Extensible Application Markup Language (XAML) dosyaları, HTML dosyaları ve nesneler.

NotNot

Bu konuda, "Tarayıcı" terimi barındırabileceği tarayıcılar başvuran WPF uygulamaları, şu anda içeren Microsoft Internet Explorer ve Firefox.Belirli yerlerde WPF yalnızca belirli bir tarayıcı tarafından desteklenen özellikleri, tarayıcı sürümü için denir.

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

  • Navigation in WPF Applications
  • NavigationWindow sınıfı
  • Çerçeve sınıfı
  • Ana gezinti
  • xaml sayfalarını dışındaki içeriğe gezinme
  • Security
  • İlgili Konular

Bu konuda anahtar gezinti özellikleri'ne genel bakış sağlar WPF. Bu yetenekleri hem tek başına uygulamaları tarafından kullanılabilen ve XBAPs, bu konuda onları içeriğinde sunar, ancak bir XBAP.

NotNot

Bu konuda oluşturmak ve dağıtmak nasıl ele XBAPs.For more information on XBAPs, see WPF XAML Tarayıcı Uygulamalarına Genel Bakış.

Bu bölümde açıklanır ve gezinti aşağıdaki yönlerini gösterir:

  • Bir sayfaya uygulama

  • Başlangıç Sayfası'nı yapılandırma

  • Ana pencerenin başlık, genişlik ve yükseklik yapılandırma

  • Köprü Gezinti

  • Parça Gezinti

  • Gezinti servisi

  • Gezinti servisi ile programlı Gezinti

  • Gezinti yaşam

  • Günlük bir gezinti anımsama

  • Sayfa yaşam süresi ve günlük

  • Gezinme geçmişi ile içerik durumunu koruyarak

  • Cookies

  • Yapılandırılmış Gezinti

Bir sayfaya uygulama

De WPF, çeşitli içerik türlerine içeren gidin .NET Framework nesneleri, özel nesneler, numaralandırma değerleri, kullanıcı denetimleri, XAML dosyaları, ve HTML dosyaları. Ancak, en yaygın ve kullanışlı bir yol için Paket içeriği kullanarak olduğunu göreceksiniz Page. Ayrıca, Page uygulayan gezinti özgü özellikleri, görünümlerini geliştirmek ve basitleştirme geliştirme.

Kullanarak Page, hazırlanmasına uygulamadan gezilebilir bir sayfa XAML içeriği kullanarak biçimlendirme gibi aşağıdaki.

<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" />

A Page içinde gerçekleştirilir XAML markup olan Page , kök öğesi olarak gerektirir ve WPF XML ad alanı bildirimi. Page Öðenin içerdiði için gitmek istediğiniz içeriği ve görüntüleme. Ayarlayarak içerik ekleme Page.Content özelliği öğesi olarak gösterilen aşağıdaki biçimlendirme.

<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <Page.Content>
    <!-- Page Content -->
    Hello, Page!
  </Page.Content>
</Page>

Page.Contentyalnızca bir alt öğe içerebilir; Yukarıdaki örnekte, tek bir içeriktir dize, "Merhaba, sayfa!" Uygulamada, genellikle alt öğesi olarak Düzen denetimi kullanır (bkz: Düzen Sistemi) içerir ve sizin içerik oluşturmak için

Alt öğelerini bir Page öğesinin içeriği olarak değerlendirilir bir Page ve sonuç olarak, gerekmeyen açıkça kullanmak Page.Content bildirimi. Yukarıdaki örnek için aşağıdaki biçimlendirme bildirimsel eşdeğerdir.

<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <!-- Page Content -->
  Hello, Page!
</Page>

Bu durumda, Page.Content ile alt öğeleri otomatik olarak ayarlanır Page öğesi. For more information, see WPF İçerik Modeli.

Bir biçimlendirme yalnızca Page yarar görüntüleneceği içerik. Ancak, bir Page de görüntüleyebilir denetimler kullanıcıların sayfa ile etkileşimine izin ver ve bu olayları işleme ve çağıran kullanıcı etkileşimine yanıt verebiliruygulama mantığı. Etkileşimli Page gerçekleştirilir kullanarak biçimlendirme ve arka planda, gösterildiği gibi aşağıdaki örnek.

<Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.HomePage">
  Hello, from the XBAP HomePage!
</Page>

Imports System.Windows.Controls ' Page

Namespace SDKSample
    Partial Public Class HomePage
        Inherits Page
        Public Sub New()
            InitializeComponent()
        End Sub
    End Class
End Namespace
using System.Windows.Controls; // Page

namespace SDKSample
{
    public partial class HomePage : Page
    {
        public HomePage()
        {
            InitializeComponent();
        }
    }
}

Biçimlendirme dosyası ve birlikte çalışmak için arka planda dosya, aşağıdaki yapılandırmaya izin veren gereklidir:

  • İşaretleme, de Page öğesi içermelidir x:Class özniteliği. Ne zaman uygulama üretilmiştir, varlığını x:Class biçimleme dosyası neden olan Microsoft build engine (MSBuild) oluşturmak için bir partial , türetir sınıfı Page ve tarafından belirtilen ada sahip x:Class özniteliği. Bu eklenmesini gerektirir bir XML ad alanı bildirimi için XAML şema (xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"). Üretilen partial sınıf Implements InitializeComponent, olayları kaydetme ve özelliklerini ayarlama, verilir, uygulanan biçimlendirme.

  • Arkadaki kod içinde sınıf olmalıdır bir partial sınıfı tarafından belirtilen adda x:Class gerekir özniteliğinde işaretleme ve türetmek Page. Böylece, arka planda dosya ile ilişkili partial uygulama oluþturulurken biçimleme dosyası için oluşturulan sınıf (bkz: WPF Uygulaması Oluşturma (WPF)).

  • Arka planda, de Page class çağıran bir kurucu uygulamak gerekir InitializeComponent yöntemi. InitializeComponentuygulanan biçimlendirme tarafından dosya oluşturulan partial sınıfı olayları kaydetmek ve işaretleme tanımlanan özellikleri ayarlamak için

NotNot

Eklediğinizde, yeni bir Page project kullanarak Microsoft Visual Studio, Page işaretleme ve arka planda, kullanılarak uygulanır ve işaretleme ve arkadaki kod dosyaları olarak açıklanan burada. arasında bir ilişki oluşturmak için gerekli yapılandırma içerir

Sonra bir Page, it. için gidin İlk belirtmek için Page , bir uygulama gider için başlangıç yapılandırmak için gereksinim duyduğunuz Page.

Başlangıç Sayfası'nı yapılandırma

XBAPsbelirli miktarda bir tarayıcıda barındırılması için uygulama altyapısı gerektirir. De WPF, Application sınıf gerekli uygulama altyapı kurar bir uygulama tanımının bir parçası olan (bkz: Uygulama Yönetimine Genel Bakış).

Uygulama tanımı, genellikle olarak yapılandırılan biçimlendirme dosyası ile işaretleme ve arka planda, kullanılarak uygulanır bir MSBuild ApplicationDefinition Madde. Aşağıdaki uygulama tanımı için ise bir XBAP.

<Application
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.App" />

Imports System.Windows ' Application

Namespace SDKSample
    Partial Public Class App
        Inherits Application
    End Class
End Namespace
using System.Windows; // Application

namespace SDKSample
{
    public partial class App : Application { }
}

Bir XBAP Uygulama tanımını bir başlangıç yapmak için kullanabileceğiniz Page, hangi Page , ne zaman otomatik olarak yüklenir XBAP başlatılır. Ayarlayarak bunu StartupUri özelliği ile uniform resource identifier (URI) için istenen Page.

NotNot

Çoğu durumda, Page içine derlenmiş veya dağıtılmış bir uygulama.Bu durumda, URI tanıtan bir Page bir paket URI, olduğu bir URI için uyan pack düzeni.Paketi URIs açıklanan daha ayrıntılı olarak WPF İçinde URI'leri Paketleme. Ayrıca aşağıda açıklanan http düzeni kullanarak içerik gidebilirsiniz.

Ayarlayabileceğiniz StartupUri hazırlanmasına, biçimlendirme, gösterildiği gibi aşağıdaki örnek.

<Application
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.App"
    StartupUri="PageWithHyperlink.xaml" />

Bu örnekte, StartupUri özniteliği göreli Pack seçili URI tanıtan HomePage.xaml. Zaman XBAP olan başlattı, HomePage.xaml otomatik olarak gezindiği ve görüntülenen. Bu gösteren aşağıdaki şekil gösterilmektedir bir XBAP bir Web sunucusuna başlattı

XBAP sayfası

NotNot

Geliştirilmesi ve dağıtımı ile ilgili daha fazla bilgi için XBAPsbakın WPF XAML Tarayıcı Uygulamalarına Genel Bakış ve Bir WPF Uygulamasının Dağıtılması (WPF).

Ana pencerenin başlık, genişlik ve yükseklik yapılandırma

Sizin etmiş önceki rakamdan bir şeydir başlığı tarayıcının ve sekme paneli olduğunu URI için XBAP. Uzun olmasının yanı sıra, çekici ve bilgilendirici başlıktır. Bu nedenle, Page ayarlayarak başlığını değiştirmek bir yol sunar WindowTitle özelliği. Üstelik, genişliğini ve yüksekliğini tarayıcı penceresinin ayarlayarak yapılandırabilirsiniz WindowWidth ve WindowHeight, sırasıyla.

WindowTitle, WindowWidth, ve WindowHeight ayarlanabilir hazırlanmasına, biçimlendirme, gibi gösterildiği aşağıdaki örnek.

<Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.HomePage"
    WindowTitle="Page Title"
    WindowWidth="500"
    WindowHeight="200">
  Hello, from the XBAP HomePage!
</Page>

The result is shown in the following figure.

Pencere başlığı, yüksekliği, genişliği

Köprü Gezinti

Normal bir XBAP adlandırılabilecek çeşitli sayfalar. Bir sayfadan diğerine gitmek için en basit yolu bir Hyperlink. Hazırlanmasına ekleyebileceğiniz bir Hyperlink için bir Page kullanarak Hyperlink öğesi, hangi gösterilen aşağıdaki biçimlendirme.

<Page
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page With Hyperlink"
  WindowWidth="250"
  WindowHeight="250">


...


<Hyperlink NavigateUri="UriOfPageToNavigateTo.xaml">
  Navigate to Another Page
</Hyperlink>


...


</Page>

A Hyperlink öğesi aşağıdakileri gerektirir:

  • Paketi URI , Page , giderek belirtildiği gibi NavigateUri özniteliği.

  • Kullanıcı metin ve görüntü gibi gezinti başlatmak için tıklayabileceğiniz içerik (içerik, Hyperlink öğesi içeren, bkz: Hyperlink).

Aşağıdaki şekil gösterir bir XBAP ile bir Page olan bir Hyperlink.

Köprü içeren Sayfa

Beklediğiniz gibi [NULL]'ı tıklatarak Hyperlink neden XBAP gitmek için Page tarafından tanımlanan NavigateUri özniteliği. Ayrıca, XBAP için önceki bir girdi ekler Page Son Sayfalar listesine Internet Explorer. Bu aşağıdaki şekilde gösterilir.

Geri ve İleri düğmeleri

Bir gezinti destekleyici yanı Page , Hyperlink de destekler parça gezinti.

Parça Gezinti

Gezinti parçalamasını istediğine gezinti ya da bir içerik parçasını için geçerli olan Page ya da başka bir Page. De WPF, içerik parçası olarak bulunan içeriğiadlandırılmış bir öğeyi. Adlandırılmış bir öğesi olan bir öğesidir, Name öznitelik kümesi. Aşağıdaki biçimlendirme bir adlandırılmış gösterir TextBlock öğesi içeren içerik bir parçası.

<Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    WindowTitle="Page With Fragments" >


...


<!-- Content Fragment called "Fragment1" -->
<TextBlock Name="Fragment1">
  Ea vel dignissim te aliquam facilisis ...
</TextBlock>


...


</Page>

İçin bir Hyperlink İçerik bölümüne gitmek için NavigateUri özniteliği, aşağıdakileri içermelidir:

  • URI , Page Gitmek için içerik parçası ile.

  • A "#" karakter.

  • Öğe adı Page içeren içerik parçası.

Bir parça URI var. aşağıdaki biçimi

PageURI#ElementName

Aşağıdaki örnek gösterir bir Hyperlink biçimde yapılandırılan gezinmek için içerik bir parçası.

<Page
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page That Navigates To Fragment" >


...


<Hyperlink NavigateUri="PageWithFragments.xaml#Fragment1">
  Navigate To pack Fragment
</Hyperlink>


...


</Page>
NotNot

Bu bölümde varsayılan parça gezinti uygulamasında açıklar WPF.WPFAyrıca, kısmen işleme gerektiren kendi parçası gezinti düzeni uygulamak verir NavigationService.FragmentNavigation olay.

Önemli notÖnemli

Gevşek parçalanma gidebilirsiniz XAML sayfalar (yalnızca biçimlendirme XAML dosyaları ile Page kök öğesi olarak) sayfaları aracılığıyla yalnızca atılabilir, HTTP.

Ancak, gevşek bir XAML sayfa gitmek için kendi parçaları.

Gezinti servisi

Sırada Hyperlink sağlayan bir kullanıcı belirli bir gezinti başlatmak Page, iş bulma ve indirme sayfası tarafından gerçekleştirilen NavigationService sınıfa Aslında, NavigationService İstemci kodu adına bir gezinti isteği gibi işleme yeteneği sağlar Hyperlink. Ayrıca, NavigationService uygulayan üst düzey desteği izleme ve influencing bir gezinti isteği.

Zaman bir Hyperlink tıklatıldığında, WPF çağrıları NavigationService.Navigate bulun ve karşıdan yüklemek için Page adresinde belirtilen paket URI. Karşıdan yüklenen Page için bir ağaç, kök nesnesi olan bir kopyasını karşıdan yüklenen nesnelerin dönüştürülür Page. Kök başvuru Page nesne depolanır NavigationService.Content özelliği. Paketi URI için gidilen içerik içinde saklanan NavigationService.Source özelliği, sırada NavigationService.CurrentSource pack depolar URI için gidilen son sayfa.

NotNot

Olan bir WPF birden fazla etkin olması için uygulama NavigationService.Daha fazla bilgi için bkz: Gezinti ana bu konuda daha sonra.

Gezinti servisi ile programlı Gezinti

Hakkında bilmeniz gerekmez NavigationService , Gezinti kullanılarak hazırlanmasına içinde gerçekleştirilir Hyperlink, çünkü Hyperlink kullanan NavigationService adına. Yani ya da doğrudan veya dolaylı ana kadar uzun bir süre bir Hyperlink bir gezinti ana (bkz: Gezinti ana), Hyperlink görebilirsiniz bulma ve kullanma gezinti ana bilgisayarın gezinti servisi işleme bir gezinti isteği.

Ancak, bazı durumlarda kullanmanız gerektiğinde NavigationService , doğrudan aşağıdaki gibi:

  • Örneğini oluşturmak gerektiğinde bir Page kullanarak bir varsayılan olmayan kurucusu.

  • Özellikleri ayarlamak gerektiğinde Page önce it. için gidin

  • Page , Gidilen için yalnızca belirlenecektir çalışma zamanı.

Bu gibi durumlarda gezinti çağırarak programla başlatmak için kod yazmak gerek Navigate yöntemi, NavigationService nesne. Başvuru alma gerektiren bir NavigationService.

İçinde kapsanan nedeniyle Gezinti ana bölümünde, bir WPF uygulama, birden fazla olabilir NavigationService. Kodunuzu bulmak için bir yol gerekir yani bir NavigationService, genellikle olduğu NavigationService Geçerli gidilen Page. Başvuru alabileceğiniz bir NavigationService çağırarak static NavigationService.GetNavigationService yöntemi. Almak için NavigationService belirli bir gidilen Page, başvuru geçmesi Page , bağımsız değişken olarak GetNavigationService yöntemi. Aşağıdaki kod, nasıl alabileceğinizi gösterir NavigationService Geçerli Page.

' Get a reference to the NavigationService that navigated to this Page
Dim ns As NavigationService = NavigationService.GetNavigationService(Me)
using System.Windows.Navigation; // NavigationServce


...


// Get a reference to the NavigationService that navigated to this Page
NavigationService ns = NavigationService.GetNavigationService(this);

Bir kısayol bulma için NavigationService için bir Page, Page uygulayan NavigationService özelliği. This is shown in the following example.

' Get a reference to the NavigationService that navigated to this Page
Dim ns As NavigationService = Me.NavigationService
using System.Windows.Navigation; // NavigationServce


...


// Get a reference to the NavigationService that navigated to this Page
NavigationService ns = this.NavigationService;
NotNot

A Page yalnızca başvuru alabilir, NavigationService , Page harekete geçiren Loaded olay.

Sayfa bir nesneye programlı Gezinti

Aşağıdaki örnek, nasıl kullanılacağını gösterir NavigationService program aracılığıyla ulaşmak için bir Page. Programlı gezinti için gerekli Page yani için gidilen sadece örneği kullanarak bir tek, varsayılan olmayan kurucusu. Page Varsayılan olmayan bir Oluşturucu ile gösterilir aşağıdaki biçimlendirme ve kod.

<Page
    x:Class="SDKSample.PageWithNonDefaultConstructor"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="PageWithNonDefaultConstructor">

  <!-- Content goes here -->

</Page>

Namespace SDKSample
    Partial Public Class PageWithNonDefaultConstructor
        Inherits Page
        Public Sub New(ByVal message As String)
            InitializeComponent()

            Me.Content = message
        End Sub
    End Class
End Namespace
using System.Windows.Controls; // Page

namespace SDKSample
{
    public partial class PageWithNonDefaultConstructor : Page
    {
        public PageWithNonDefaultConstructor(string message)
        {
            InitializeComponent();

            this.Content = message;
        }
    }
}

Page , Gider Page varsayılan olmayan bir Oluşturucu ile gösterilir aşağıdaki biçimlendirme ve kod.

<Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.NSNavigationPage">

  <Hyperlink Click="hyperlink_Click">
    Navigate to Page with Non-Default Constructor
  </Hyperlink>

</Page>

Namespace SDKSample
    Partial Public Class NSNavigationPage
        Inherits Page
        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub hyperlink_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Instantiate the page to navigate to
            Dim page As New PageWithNonDefaultConstructor("Hello!")

            ' Navigate to the page, using the NavigationService
            Me.NavigationService.Navigate(page)
        End Sub
    End Class
End Namespace
using System.Windows; // RoutedEventArgs
using System.Windows.Controls; // Page
using System.Windows.Navigation; // NavigationService

namespace SDKSample
{
    public partial class NSNavigationPage : Page
    {
        public NSNavigationPage()
        {
            InitializeComponent();
        }

        void hyperlink_Click(object sender, RoutedEventArgs e)
        {
            // Instantiate the page to navigate to
            PageWithNonDefaultConstructor page = new PageWithNonDefaultConstructor("Hello!");

            // Navigate to the page, using the NavigationService
            this.NavigationService.Navigate(page);
        }
    }
}

Zaman Hyperlink Bu Page olan tıklattıysanız, Gezinti başlatmasını tarafından başlatılan Page olmayan varsayılan kurucuyu kullanarak ve arama gidin NavigationService.Navigate yöntemi. Navigatenesnesine bir başvuru kabul eder, NavigationService gitmek için bir paketi yerine URI.

Bir paketi URI ile programlı Gezinti

Bir paketi oluşturmak gerekirse URI programlı olarak (ne zaman, yalnızca belirlemek pack URI çalışacak zaman, örneğin), kullanabileceğiniz NavigationService.Navigate yöntemi. This is shown in the following example.

<Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.NSUriNavigationPage">
  <Hyperlink Click="hyperlink_Click">Navigate to Page by Pack URI</Hyperlink>
</Page>

Namespace SDKSample
    Partial Public Class NSUriNavigationPage
        Inherits Page
        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub hyperlink_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Create a pack URI
            Dim uri As New Uri("AnotherPage.xaml", UriKind.Relative)

            ' Get the navigation service that was used to 
            ' navigate to this page, and navigate to 
            ' AnotherPage.xaml
            Me.NavigationService.Navigate(uri)
        End Sub
    End Class
End Namespace
using System; // Uri, UriKind
using System.Windows; // RoutedEventArgs
using System.Windows.Controls; // Page
using System.Windows.Navigation; // NavigationService

namespace SDKSample
{
    public partial class NSUriNavigationPage : Page
    {
        public NSUriNavigationPage()
        {
            InitializeComponent();
        }

        void hyperlink_Click(object sender, RoutedEventArgs e)
        {
            // Create a pack URI
            Uri uri = new Uri("AnotherPage.xaml", UriKind.Relative);

            // Get the navigation service that was used to 
            // navigate to this page, and navigate to 
            // AnotherPage.xaml
            this.NavigationService.Navigate(uri);
        }
    }
}

Geçerli sayfa yenileme

A Page değil yüklenme durumunda aynı pakete sahip URI paketi olarak URI içinde saklanan NavigationService.Source özelliği. Zorlamak için WPF Geçerli sayfayı yüklemek için yeniden çağırabileceğiniz NavigationService.Refresh yöntemi, gösterildiği gibi aşağıdaki örnek.

<Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.NSRefreshNavigationPage">
 <Hyperlink Click="hyperlink_Click">Refresh this page</Hyperlink>
</Page>

Namespace SDKSample
    Partial Public Class NSRefreshNavigationPage
        Inherits Page


...


        Private Sub hyperlink_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Force WPF to download this page again
            Me.NavigationService.Refresh()
        End Sub
    End Class
End Namespace
using System.Windows; // RoutedEventArgs
using System.Windows.Controls; // Page
using System.Windows.Navigation; // NavigationService

namespace SDKSample
{
    public partial class NSRefreshNavigationPage : Page
    {


...


        void hyperlink_Click(object sender, RoutedEventArgs e)
        {
            // Force WPF to download this page again
            this.NavigationService.Refresh();
        }
    }
}

Gezinti yaşam

Gördüğünüz gibi gezinti, başlatmak için birçok yol vardır. Gezinti başlatılır ve gezinti sürerken izleyebilir ve tarafından uygulanan aşağıdaki olayları kullanarak gezinti etkileyen NavigationService:

  • Navigating. Yeni bir gezinti istendiğinde gerçekleşir. Gezinme iptal etmek için kullanılır.

  • NavigationProgress. Occurs periodically during a download to provide navigation progress information.

  • Navigated. Sayfasında yer alan ve karşıdan ortaya çıkar.

  • NavigationStopped. Gezinti durduğunda oluşur (çağırarak StopLoading), veya ne zaman yeni bir gezinti istenen geçerli gezinti devam ediyor. iken

  • NavigationFailed. İstenen içeriğe gezinirken bir hata ortaya çıktığında oluşur.

  • LoadCompleted. İçin gidilen içerik yüklenir ayrıştırıldı ve işleme başladı oluşur.

  • FragmentNavigation. Hangi olmuyor içerik parçası için Gezinti başladığında oluşur:

    • Hemen istenilen parça geçerli içerikte ise.

    • İstenilen parça farklı içerikte ise kaynak içeriği yüklendikten sonra.

Gezinti olaylar tarafından aşağıdaki şekilde gösterildiği sırada üretilir.

Sayfa gezintisi akış çizelgesi

Genel olarak, bir Page değil endişe hakkında bu olayları. Bir uygulama ile ilgili olduğu ve bu nedenle, bu olaylar da tarafından üretilir olasılıkları Application class:

Her NavigationService bir olayı harekete geçiren Application sınıf yükseltir ilgili bir olay. Frameve NavigationWindow aynı olayları algılamak içinde gezinme sunarilgili kendi kapsamları.

Bazı durumlarda, bir Page olayları ilgilenen olabilir Örneğin, bir Page ele NavigationService.Navigating kendisi uzakta gezinti iptal edilip edilmeyeceğini belirlemek için olay. This is shown in the following example.

<Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.CancelNavigationPage">
  <Button Click="button_Click">Navigate to Another Page</Button>
</Page>

Namespace SDKSample
    Partial Public Class CancelNavigationPage
        Inherits Page
        Public Sub New()
            InitializeComponent()

            ' Can only access the NavigationService when the page has been loaded
            AddHandler Loaded, AddressOf CancelNavigationPage_Loaded
            AddHandler Unloaded, AddressOf CancelNavigationPage_Unloaded
        End Sub

        Private Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Force WPF to download this page again
            Me.NavigationService.Navigate(New Uri("AnotherPage.xaml", UriKind.Relative))
        End Sub

        Private Sub CancelNavigationPage_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
            AddHandler NavigationService.Navigating, AddressOf NavigationService_Navigating
        End Sub

        Private Sub CancelNavigationPage_Unloaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
            RemoveHandler NavigationService.Navigating, AddressOf NavigationService_Navigating
        End Sub

        Private Sub NavigationService_Navigating(ByVal sender As Object, ByVal e As NavigatingCancelEventArgs)
            ' Does the user really want to navigate to another page?
            Dim result As MessageBoxResult
            result = MessageBox.Show("Do you want to leave this page?", "Navigation Request", MessageBoxButton.YesNo)

            ' If the user doesn't want to navigate away, cancel the navigation
            If result = MessageBoxResult.No Then
                e.Cancel = True
            End If
        End Sub
    End Class
End Namespace
using System; // Uri, UriKind
using System.Windows; // RoutedEventArgs, MessageBox, MessageBoxResult
using System.Windows.Controls; // Page
using System.Windows.Navigation; // NavigationService, NavigatingCancelEventArgs

namespace SDKSample
{
    public partial class CancelNavigationPage : Page
    {
        public CancelNavigationPage()
        {
            InitializeComponent();

            // Can only access the NavigationService when the page has been loaded
            this.Loaded += new RoutedEventHandler(CancelNavigationPage_Loaded);
            this.Unloaded += new RoutedEventHandler(CancelNavigationPage_Unloaded);
        }

        void button_Click(object sender, RoutedEventArgs e)
        {
            // Force WPF to download this page again
            this.NavigationService.Navigate(new Uri("AnotherPage.xaml", UriKind.Relative));
        }

        void CancelNavigationPage_Loaded(object sender, RoutedEventArgs e)
        {
            this.NavigationService.Navigating += new NavigatingCancelEventHandler(NavigationService_Navigating);
        }

        void CancelNavigationPage_Unloaded(object sender, RoutedEventArgs e)
        {
            this.NavigationService.Navigating -= new NavigatingCancelEventHandler(NavigationService_Navigating);
        }

        void NavigationService_Navigating(object sender, NavigatingCancelEventArgs e)
        {
            // Does the user really want to navigate to another page?
            MessageBoxResult result;
            result = MessageBox.Show("Do you want to leave this page?", "Navigation Request", MessageBoxButton.YesNo);

            // If the user doesn't want to navigate away, cancel the navigation
            if (result == MessageBoxResult.No) e.Cancel = true;
        }
    }
}

Bir gezinti olay işleyici yaptırmak, bir Page, önceki örnekte olduğu gibi aynı zamanda olay işleyicisi. kaydını gerekir Bunu yapmazsanız, yan etkileri açısından nasıl olabilir WPF Gezinti hatırlar Page Gezinti kullanarak günlük.

Günlük bir gezinti anımsama

WPFiki yığınları arasında gittiğiniz sayfaları anımsanması kullanır: Yığın geri ve ileri bir yığın. Geçerli gitmek ne zaman Page Yeni bir Page ya da varolan bir İleri Page, Cari Page eklenir yığın geri. Geçerli gitmek ne zaman Page dön önceki Page, Cari Page eklenen ileriye doğru yığın. Geri yığını, ileriye doğru yığın ve bunları yönetmek için İşlevler topluca için günlük olarak adlandırılır. Her maddenin geri yığın ve ileriye doğru yığın örneğidir JournalEntry sınıf ve olarak adlandırılmıştır bir günlük girdisi.

Internet Explorer günlükten gezinme

Kavramsal olarak, günlük aynı çalışır şekilde o geri ve İleri , düğmeleri Internet Explorer do. Bunlar aşağıdaki şekilde gösterilmiştir.

Geri ve İleri düğmeleri

İçin XBAPs tarafından barındırılan Internet Explorer, WPF tümleştirir gezinti günlüğe UI , Internet Explorer. Bu sayfalarda gezinmek kullanıcılar sağlar bir XBAP kullanarak geri, İleri, ve Son Sayfalar içinde düğmeleri Internet Explorer. Günlük içine entegre edilemez Microsoft Internet Explorer 6 olduğu için aynı şekilde Internet Explorer 7 veya Internet Explorer 8. Bunun yerine, WPF bir alternatif gezinti işler UI.

Önemli notÖnemli

De Internet Explorer, bir kullanıcı uzağa geçtiğinde ve geri bir XBAP, yalnızca günlük girişlerine, değil tutulan Canlı sayfalar için günlüğü korunurSayfaları canlı tutma ile ilgili tartışma için bkz: sayfa yaşam ve günlük bu konuda daha sonra.

Varsayılan olarak, her metin Page görüntülenen Son Sayfalar listesini Internet Explorer olan URI için Page. Çoğu durumda, bu kullanıcıya özellikle anlamlı değildir. Neyse ki, aşağıdaki seçenekleri kullanarak metni değiştirebilirsiniz:

  1. Ekli JournalEntry.Name öznitelik değeri.

  2. Page.Title Öznitelik değeri.

  3. Page.WindowTitle Özniteliği değerini ve URI Geçerli Page.

  4. URI Geçerli Page. (Default)

Metin bulmak için kullanım önceliği sırasını seçenekleri listelenme sırasını eşleşir. Örneğin, JournalEntry.Name , diğer değerler göz ardı edilir, ayarlanmış,.

Aşağıdaki örnek Page.Title özniteliği için görüntülenen metni değiştirmek içinbir günlük girdisi.

<Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.PageWithTitle"
    Title="This is the title of the journal entry for this page.">


...


</Page>

Namespace SDKSample
    Partial Public Class PageWithTitle
        Inherits Page


...


    End Class
End Namespace
using System.Windows.Controls; // Page

namespace SDKSample
{
    public partial class PageWithTitle : Page
    {


...


    }
}

Günlük wpf kullanarak gezinme

Kullanıcı günlüğü kullanarak gidebilirsiniz rağmen geri, İleri, ve Son Sayfalar , Internet Explorer, de gitmek tarafından sağlanan bildirime dayanan ve programlı mekanizmaları kullanarak günlük WPF. Bunun bir nedeni olan özel gezinti sağlamak için UIs sayfaları.

Tarafından sergilenen gezinti komutlarını kullanarak günlük gezinti desteği hazırlanmasına eklemek NavigationCommands. Aşağıdaki örnek, nasıl kullanılacağını gösterir BrowseBack Gezinti komutu.

<Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.NavigationCommandsPage">


...


<Hyperlink Command="NavigationCommands.BrowseBack">Back</Hyperlink>


...


<Hyperlink Command="NavigationCommands.BrowseForward">Forward</Hyperlink>


...


</Page>

Aşağıdaki üyeleri birini kullanarak günlük programsal olarak gezinme NavigationService class:

Günlük de anlatıldığı gibi programlı olarak işlenebilir Retaining içeriği gezinti geçmişindeki durumuyla bu konuda daha sonra.

Sayfa yaşam süresi ve günlük

Düşünün bir XBAP zengin içerik içeren birkaç sayfa içeren grafikler, animasyonlar ve dahilmedya. Bu sayfalar için bellek parmak özellikle video ve ses media kullanılıyorsa oldukça büyük olabilir. Navigated için bu tür sayfaları günlüğü "hatırlar koşuluyla," bir XBAP hızla tüketebilir dikkat çekici ve büyük miktarda bellek.

Bu nedenle, varsayılan davranış günlük saklamaktır Page başvuru yerine her günlük girdisi meta verileri bir Page nesne. Bir günlük girdisi için geçtiğiniz zaman, Page meta verileri belirtilen yeni bir örneğini oluşturmak için kullanılan Page. Sonuçta her Page gidilen aşağıdaki şekil. tarafından gösterilen yaşam süresi

Sayfa ömrü

Varsayılan olarak günlüğe kaydetme davranışını kullanan bellek tüketimi kaydedebilirsiniz, ancak sayfa başına işleme performansı azalabilir; reinstantiating bir Page zaman yoğun, özellikle, çok miktarda sahip olabiliriçerik. Korumak gerekirse bir Page örnek kılınırsa yapmak için iki teknikleri üzerinde çizebilirsiniz günlük İlk olarak, program aracılığıyla gidebilirsiniz bir Page çağırarak nesnenin NavigationService.Navigate yöntemi.

İkincisi, belirtebilirsiniz WPF bir kopyasını tutmak bir Page ayarlayarak günlüğü KeepAlive özelliğine true (varsayılan false). Aşağıdaki örnekte gösterildiği gibi ayarlayabilirsiniz KeepAlive bildirimli olarak işaretleme.

<Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.KeepAlivePage"
    KeepAlive="True">

  An instance of this page is stored in the journal.

</Page>

Yaşam bir Page yani canlı tutulan değil. olan birinden dilden çok az farklı olan İlk kez bir Page , tutulur Canlı gezindiği, yalnızca gibi örneklenmiş bir Page , değil tutulur alive. Ancak, çünkü örneğini Page korunur, günlük. kaldığı sürece günlükte, onu hiçbir zaman yeniden için örneği Sonuç olarak, bir Page her zaman çağrılması gereken bir başlatma mantık Page görüntülendiği için kurucusundan bir işleyici içine taşımadan Loaded olay. Aşağıdaki şekilde gösterildiği gibi Loaded ve Unloaded olaylar hala her zaman yükseltilmiş bir Page birinden diğerine, sırasıyla gidilen.

Yüklenen ve Yüklenmeyen olaylar başlatıldığında

Zaman bir Page olan tutulan Canlı değil, aşağıdakilerden birini yapmamalısınız:

  • Bir başvuru veya herhangi bir kısmını depolar.

  • Olay işleyicileri olarak uygulanmadı olayları kaydedin.

Bunlardan herhangi birini yapmaya zorlamak başvurular oluşturur Page için tutulan belleğe, daha sonra onu kaldırılmıştır günlük.

Genel olarak, varsayılan tercih etmelisiniz Page davranış değil tutmanın bir Page tut. Ancak, bu sonraki bölümde açıklanan durum olası etkilere sahiptir.

Gezinme geçmişi ile içerik durumunu koruyarak

Yoksa bir Page Canlı, tutulamaz ve veri bir kullanıcı uzağa giderse ve başa neler kullanıcıdan verileri toplayan denetimleri olan Page? Kullanıcı deneyimi açısından bakıldığında, kullanıcının önceden girilmiş verileri görmek beklemeniz gerekir. Ne yazık ki, çünkü yeni bir örneğini Page her Gezinti ile toplanan verileri reinstantiated veriler kaybolur denetimler oluşturulur.

Neyse ki, günlük veriler arasında hatırlama için destek sağlar Page gezintiler, dahil olmak üzere Denetim veri. Özellikle, her günlük girdisi Page ilişkili için geçici bir kapsayıcı gibi davranan Page durumu. Bu desteği nasıl kullanıldığı için aşağıdaki adımların anahatlarını, bir Page karşı çıkıldığında:

  1. Geçerli bir giriş Page eklenir günlük.

  2. Durumu Page Bu sayfanın arka yığını eklenir, günlük girdisi ile saklanır

  3. Yeni Page için gidilen.

Zaman sayfa Page olan geri, journal kullanarak gezindiği aşağıdaki adımlar gerçekleşir:

  1. Page (Geri yığında üstteki günlük girdisi) örneği.

  2. Page Günlük girdisi ile saklanır durumu yenilenene Page.

  3. Page Başa gidilen.

WPFaşağıdaki denetimleri üzerinde kullanıldığında, otomatik olarak bu desteği kullanan bir Page:

Yoksa bir Page boyunca kullandığı bu denetimlerden veri girilen bunları söyledim Page tarafından gösterildiği gibi gezintiler En sevdiğiniz renk ListBox Aşağıdaki şekil.

Durumu anımsayan denetimlerin bulunduğu sayfa

Zaman bir Page olan yukarıdaki listede dışındaki denetimleri veya zaman durum özel nesneler depolanır gerekir unutmayın boyunca durumu günlüğe neden kodu yazmak Page gezintiler.

Küçük parçalar arasında durumunun bilinmesi gereken Page gezintiler, bağımlılık özellikleri kullanabilirsiniz (bkz: DependencyProperty) ile yapılandırılmış FrameworkPropertyMetadata.Journal meta bayrağı.

Durum, kendi Page gezintiler arasında anımsanması gereken birden çok veri parçalarını kapsar, size daha az kod tek bir sınıf içinde bulunduğunuz şehri kapsayan ve uygulamak amacıyla yoğun gelebilir IProvideCustomContentState arabirimi.

Tek bir çeşitli durumları arasında gezinmek gereken Page, dan gezinme olmadan Page kendisini kullanarak IProvideCustomContentState ve NavigationService.AddBackEntry.

Cookies

Başka bir şekilde o WPF uygulamaları, veri saklayabilir oluşturulan tanımlama bilgileriyle güncelleştirildi ve kullanarak silinmiş SetCookie ve GetCookie yöntemleri. Tanımlama bilgilerini de oluşturabilirsiniz WPF olan aynı tanımlama bilgilerinin Web uygulamaları kullanan; tanımlama bilgileri bir istemci makine üzerinde bir uygulama sırasında veya uygulama oturumları boyunca tarafından depolanan verileri rasgele parçalarıdır. Tanımlama bilgisi verileri, genellikle aşağıdaki biçimde bir ad/değer çifti biçimini alır.

Adı=değer

Ne zaman veri gönderilir için SetCookie, birlikte Uri hangi tanımlama ayarlanmalıdır, konumunun bir tanımlama bilgisi, bellek içi, oluşturulur ve onu yalnızca kullanılabilir süresince geçerli uygulama oturumu. Olarak bu tür bir çerez denir bir oturum tanımlama.

Uygulama oturumları arasında bir tanımlama bilgisini depolamak için aşağıdaki biçimi kullanarak tanımlama için sona erme tarihi eklenmelidir.

ADI=değer; expires=DAY, DD-MMM-YYYY HH:MM:SS GMT

Geçerli sona erme tarihini içeren bir tanımlama bilgisi saklanır Windows tanımlama bilgisi süresi dolana kadar yükleme 's Temporary Internet Files klasörünün. Böyle bir tanımlama bilgisi olarak bilinen bir kalıcı bir tanımlama bilgisi uygulama oturumları kalýcý olduðu.

Oturum ve kalıcı tanımlama bilgileri çağırarak almak GetCookie yöntemini Uri Burada tanımlama ayarlandığı ile konumunun SetCookie yöntemi.

Aşağıda bazı tanımlama bilgileri desteklenen yoldan WPF:

  • WPFtek başına çalışan uygulamaları ve XBAPs hem de oluşturabileceğiniz ve yönetebileceğiniz tanımlama.

  • Tarafından oluşturulan tanımlama bilgilerini bir XBAP tarayıcı erişilebilir

  • XBAPsaynı etki alanından, oluşturma ve tanımlama bilgilerini paylaşmak.

  • XBAPsve HTML aynı etki alanından sayfaları oluşturma ve paylaşma tanımlama.

  • Tanımlama bilgileri gönderilir, XBAPs ve gevşek XAML sayfaları olun Web istekleri.

  • Hem de en üst düzey XBAPs ve XBAPs içinde barındırılan IFRAMES erişebilir tanımlama.

  • Tanımlama bilgisi desteği WPF aynıdır tüm desteklenen tarayıcılar.

  • De Internet Explorer, tarafından P3P ilke tanımlama bilgilerini ilgili ödenen WPF, özellikle açısından birinci taraf ve üçüncü taraf XBAPs.

Yapılandırılmış Gezinti

Sunucudan veri aktarmak istiyorsanýz Page diğerine, veri bağımsız değişken olarak varsayılan olmayan yapıcısına iletebilirsiniz Page. Not Bu tekniği kullanmak, korumak gerekir Page Canlı; bir sonraki açışınızda, gitmek değil, varsa Page, WPF reinstantiates Page kullanarak varsayılan kurucu.

Alternatif olarak, sizin Page iletilmesi gereken verilerle ayarlanmış özellikleri uygulayabilirsiniz. Şey haline zordur, ancak, ne zaman bir Page geçmesine verileri yedeklemeniz Page it. gidilen Gezinti özgün mekanizmalarını güvence altına, almak için desteklemediğini sorun olan bir Page karşı çıkıldığında sonra döndürülürsünüz. Aslında, Gezinti çağrı/iade semantiği desteklemiyor. Bu sorunu çözmek için WPF sağlar PageFunction<T> , emin olmak için kullanabilirsiniz sınıfı bir Page döner için öngörülebilir ve yapılandırılmış şekilde. Daha fazla bilgi için bkz: Yapılandırılmış Gezinti Özeti.

Bu noktaya gezilebilir içerikli uygulamaları geliştirin olasılıkla gezinti servislerinin skala gördük. Bu hizmetler kapsamında açıklanan XBAPs, ancak bunlarla sınırlı olmamak üzere olduğu XBAPs. Modern işletim sistemleri ve Windows uygulamaları tarayıcı stil gezinti tek başına uygulamaları birleştirmek için modern kullanıcıların tarayıcı deneyimini bir yararlanırlar. Yaygın örnekler:

  • Eşanlamlı sözcük: Word Seçenekler gidin.

  • Dosya Explorer: Dosya ve klasörleri gidin.

  • Sihirbazlar: Karmaşık bir görev arasında gezindiği birden çok sayfa içine aşağı kesiliyor. Windows Bileşenleri Sihirbazı ekleme ve kaldırma işleyen bir örnektir Windows özellikleri.

Tarayıcı stil gezinti tek başına uygulamalarınıza eklemek için kullanabileceğiniz NavigationWindow sınıfa NavigationWindowtüretildiği Window ve genişletir gezinti için aynı desteği ile XBAPs sağlar. Kullanabileceğiniz NavigationWindow iki ana pencereden tek başına uygulama olarak veya ikincil bir pencere gibi bir iletişim kutusu.

Uygulamak için bir NavigationWindow, olduğu gibi çoğu düzey sınıflar WPF ()Window, Page, vb.), biçimlendirme ve kodu birleşimini kullanın-arkada. This is shown in the following example.

<NavigationWindow
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.MainWindow" 
    Source="HomePage.xaml"/>

Namespace SDKSample
    Partial Public Class MainWindow
        Inherits NavigationWindow
        Public Sub New()
            InitializeComponent()
        End Sub
    End Class
End Namespace
using System.Windows.Navigation; // NavigationWindow

namespace SDKSample
{
    public partial class MainWindow : NavigationWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

Bu kod oluşturur bir NavigationWindow , otomatik olarak gider için bir Page (HomePage.xaml), NavigationWindow açılır. NavigationWindow Ana uygulama penceresi kullanabilirsiniz StartupUri özniteliği it. başlatmak için Bu aşağıdaki biçimlendirme gösterilir.

<Application
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    StartupUri="MainWindow.xaml" />

Aşağıdaki şekil gösterir NavigationWindow olarak ana penceresinde bir tek başına uygulama.

Ana pencere

Rakamdan, gördüğünüz NavigationWindow onu ayarlanmadı olsa bir başlığa sahip NavigationWindow uygulama kodu Yukarıdaki örnek. Bunun yerine, başlık ayarlanmış WindowTitle özelliği, hangi gösterilen aşağıdaki kodu.

<Page 
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    Title="Home Page"
    WindowTitle="NavigationWindow">


...


</Page>

Ayarlama WindowWidth ve WindowHeight özelliklerini de etkiler NavigationWindow.

Genellikle, kendi uygulamadan NavigationWindow zaman duyduğunuz özelleştirme davranış ya da kendi görünümü. İkisi de yoksa, bir kısayol kullanabilirsiniz. Paketi belirtirseniz, URI , bir Page olarak StartupUri bir tek başına uygulamada, Application otomatik olarak oluşturur bir NavigationWindow ana Page. Aşağıdaki biçimlendirme Bunu etkinleştirmek gösterilmiştir.

<Application
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    StartupUri="HomePage.xaml" />

İkincil uygulama penceresi için bir iletişim kutusu gibi istediğiniz bir NavigationWindowit. açmak için aşağıdaki örnek kodda kullanın

            ' Open a navigation window as a dialog box
            Dim dlg As New NavigationWindowDialogBox()
            dlg.Source = New Uri("HomePage.xaml", UriKind.Relative)
            dlg.Owner = Me
            dlg.ShowDialog()
// Open a navigation window as a dialog box
NavigationWindowDialogBox dlg = new NavigationWindowDialogBox();
dlg.Source = new Uri("HomePage.xaml", UriKind.Relative);
dlg.Owner = this;
dlg.ShowDialog();

The following figure shows the result.

İletişim kutusu

Gördüğünüz gibi NavigationWindow görüntüler Internet Explorer-Stil geri ve İleri kullanıcıların günlük gezinmek düğmeler. Bu düğmeler, aşağıdaki resimde gösterildiği gibi aynı kullanıcı deneyimi sağlar.

NavigationWindow içinde Geri ve İleri düğmeleri

Sayfalarınızı kendi günlük gezinti desteği ve UI sağlarsanız, gizleyebilirsiniz geri ve İleri tarafından görüntülenen düğmeler NavigationWindow değerini ayarlayarak ShowsNavigationUI özelliğine false.

Alternatif olarak, özelleştirme desteği kullanabilirsiniz WPF değiştirmek için UI , NavigationWindow kendi.

Çerçeve sınıfı

Her iki tarayıcı ve NavigationWindow olan windows o ana gezilebilir içeriği. Bazı durumlarda, uygulamalar, pencerenin tümünü tarafından barındırılan gerekmez içeriğe sahiptir. Bunun yerine, bu tür içeriği diğer içeriği içinde barındırılması. Kullanarak diğer içeriği olarak gezilebilir içeriği ekleyebileceğiniz Frame sınıfa Frameolarak aynı desteği sağlayan NavigationWindow ve XBAPs.

Aşağıdaki örnek nasıl ekleneceğini gösterir bir Frame için bir Page hazırlanmasına kullanarak Frame öğesi.

<Page 
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page that Hosts a Frame"
  WindowWidth="250"
  WindowHeight="250">


...


<Frame Source="FramePage1.xaml" />


...


</Page>

Bu işaretleme ayarlar Source özniteliği Frame öğesi bir paketi ile URI için Page , Frame Başlangıçta gitmek. Aşağıdaki şekil gösterir bir XBAP ile bir Page olan bir Frame birkaç sayfaları arasında gezindiği

Birden çok sayfa arasında gezinen kare

Kullanmak yalnızca yoksa Frame içeriği içinde bir Page. Barındırmak için ortaktır bir Frame içeriği içinde bir Window.

Varsayılan olarak, Frame yokluğunda kendi günlüğünde, yalnızca kullanırbaşka bir günlük. Yoksa bir Frame ya da içinde barındırılan içerik parçası olan bir NavigationWindow veya bir XBAP, Frame ait günlük kullanır NavigationWindow veya XBAP. Bazı durumlarda, bir Frame için sorumlu olması gerekebilirkendi günlük. Bunun bir nedeni olan günlük gezinti tarafından barındırılan sayfalar içinde izin veren bir Frame. Bu tarafından aşağıdaki şekilde gösterilmiştir.

Kare ve Sayfa diyagramı

Bu durumda, yapılandırma Frame ayarlayarak kendi günlük kullanılacak JournalOwnership özelliği Frame için OwnsJournal. Bu aşağıdaki biçimlendirme gösterilir.

<Page 
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page that Hosts a Frame"
  WindowWidth="250"
  WindowHeight="250">


...


<Frame Source="FramePage1.xaml" JournalOwnership="OwnsJournal" />


...


</Page>

Aşağıdaki şekil içinde gezinme etkisini göstermektedir bir Frame kullanan, kendi günlük.

Kendi günlüğünü kullanan bir kare

Günlük girdilerini gezinti tarafından gösterilen dikkat edin UI , Frame, yerine göre Internet Explorer.

NotNot

Bir Frame içinde barındırılan içerik parçası olan bir Window, Frame , kendi günlük kullanır ve sonuç olarak, kendi gezinti görüntüler UI.

Kullanıcı deneyiminizi gerektiriyorsa, bir Frame gösteren gezinti olmadan kendi günlük sağlamak için UI, Gezinti gizleme UI ayarlayarak NavigationUIVisibility için Hidden. Bu aşağıdaki biçimlendirme gösterilir.

<Page 
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page that Hosts a Frame"
  WindowWidth="250"
  WindowHeight="250">


...


<Frame 
  Source="FramePage1.xaml" 
  JournalOwnership="OwnsJournal" 
  NavigationUIVisibility="Hidden" />


...


</Page>

Ana gezinti

Frameve NavigationWindow olarak bilinen sınıflarıana gezinti. A Gezinti ana gidin ve içeriği görüntülemek bir sýnýftýr. Bunu başarmak için her gezinti ana kendi kullandığı NavigationService ve günlük. Bir gezinti ana temel yapı aşağıdaki şekilde gösterilmiştir.

Gezgin diyagramları

Aslında, böylece NavigationWindow ve Frame aynı sağlamak için Gezinti desteklemek, bir XBAP sağlar, barındırılan tarayıcı.

Kullanarak yanı sıra NavigationService ve bir günlük gezinti ana bilgisayarları uygulayan aynı üyeler, NavigationService uygular. Bu tarafından aşağıdaki şekilde gösterilmiştir.

Frame ve NavigationWindow içinde bir günlük

Bu, programın gezinti desteği doğrudan onlara karşı sağlar. Özel gezinti sağlamanız gerekirse bu düşünebilirsiniz UI için bir Frame içinde barındırılan bir Window. Ayrıca, her iki tür de dahil olmak üzere, gezinme ile ilgili ek üyeleri uygulamak BackStack ()NavigationWindow.BackStack, Frame.BackStack) ve ForwardStack ()NavigationWindow.ForwardStack, Frame.ForwardStack), günlük girdilerini geri yığını ve ileriye doğru yığın sırasıyla numaralandırmak izin.

Daha önce belirtildiği gibi birden fazla günlük bir uygulama içinde bulunabilir. Aşağıdaki şekil bu gerçekleşebilir bir örnek sağlar.

Bir uygulamanın içinde birden çok günlük

xaml sayfalarını dışındaki içeriğe gezinme

Bu konuda tüm Page ve paketi XBAPs çeşitli gezinti becerilerini göstermek için kullanılmış WPF. Ancak, bir Page yani bir uygulamaya derlenmesi için gidilen içerik ve paketi türü değil XBAPs olmayan tek yolu tanımlamak içeriği.

Bu bölümde gösterdiği gibi aynı zamanda için gevşek gezinebilirsiniz XAML dosyaları, HTML dosyaları ve nesneler.

Bağımsız xaml dosyalarda gezinme

Gevşek bir XAML Dosya, aşağıdaki özelliklere sahip bir dosyası:

  • Yalnızca içeren XAML (yani, hiçbir kod).

  • Bir uygun ad alaný bildirimi vardır.

  • .Xaml dosya adı uzantısına sahiptir.

Örneğin, gevşek depolanmış olan aşağıdaki içeriğe göz önünde XAML dosyası Person.xaml.

<!-- Person.xaml -->
<TextBlock xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <TextBlock FontWeight="Bold">Name:</TextBlock>
  <TextBlock>Nancy Davolio</TextBlock>
  <LineBreak />
  <TextBlock FontWeight="Bold">Favorite Color:</TextBlock>
  <TextBlock>Yellow</TextBlock>
</TextBlock>

Dosyayı çift tıklattığınızda, tarayıcıyı açar ve gider ve içeriği görüntüler. Bu aşağıdaki şekilde gösterilir.

Person.XAML dosyasında içeriği görüntüleme

Gevşek bir görüntüleme XAML aşağıdaki dosyadan:

  • Bir Web sitesi yerel makine, intranet veya Internet üzerindeki.

  • A Universal Naming Convention (UNC) Dosya Paylaşımı.

  • Yerel disk.

Gevşek bir XAML Dosya can be added to tarayıcının sık veya olması tarayıcının giriş sayfası.

NotNot

Yayımlama ve gevşek başlatma hakkında daha fazla bilgi için XAML sayfaları, bkz: Bir WPF Uygulamasının Dağıtılması (WPF).

Tek sınırlama açısından gevşek XAML ise, yalnızca ana içeriği, kısmi güven. çalıştırmak güvenli yapabilirsiniz Örneğin, Window gevşek bir kök öğesi olamaz XAML dosyası. For more information, see WPF Kısmi Güven Güvenliği.

html dosyaları için çerçeve kullanarak gezinme

Tahmin edebileceğiniz gibi aynı zamanda gidebilirsiniz HTML. Sağlamak yeterlidir bir URI kullanan http düzeni. Örneğin, aşağıdaki XAML gösteren bir Frame , gider bir HTML Sayfa.

<Frame Source="https://www.microsoft.com/default.aspx" />

İçin gezinme HTML gerektiren özel izinler. Örneğin, gelen geçemeyeceği bir XBAP Internet bölgesi kısmi güven güvenlik sanal alanında çalışıyor. Daha fazla bilgi için bkz: WPF Kısmi Güven Güvenliği.

html dosyaları için WebBrowser denetimi kullanarak gezinme

WebBrowser Denetimi destekler HTML belge barındırma, gezinti ve komut dosyası/yönetilen kod birlikte çalışabilirlik. Ayrıntılı bilgi için ilgili WebBrowser denetlemek için bkz: WebBrowser.

Gibi Frame, gezinme için HTML kullanarak WebBrowser gerektiren özel izinler. Örneğin, bir kısmi güven uygulamasından, yalnızca gezinebilirsiniz HTML bulunan sitesindeki kaynağı. For more information, see WPF Kısmi Güven Güvenliği.

Özel nesneler için gezinme

Özel nesneleri olarak depolanan veriler varsa, bu verileri görüntülemek için bir yolu oluşturmaktır bir Page Bu nesnelere bağlı içerikle (bkz: Veri Bağlama Genel Bakış). Yalnızca görüntüleme nesneleri için tüm bir sayfayı oluşturma yükünü gerekiyorsa, bunun yerine bunları doğrudan gidebilirsiniz.

Göz önünde Person sınıfı aşağıdaki kod. uygulanan


Namespace SDKSample
    Public Class Person
        Private _name As String
        Private _favoriteColor As Color

        Public Sub New()
        End Sub
        Public Sub New(ByVal name As String, ByVal favoriteColor As Color)
            Me._name = name
            Me._favoriteColor = favoriteColor
        End Sub

        Public Property Name() As String
            Get
                Return Me._name
            End Get
            Set(ByVal value As String)
                Me._name = value
            End Set
        End Property

        Public Property FavoriteColor() As Color
            Get
                Return Me._favoriteColor
            End Get
            Set(ByVal value As Color)
                Me._favoriteColor = value
            End Set
        End Property
    End Class
End Namespace
using System.Windows.Media; // Color

namespace SDKSample
{
    public class Person
    {
        string name;
        Color favoriteColor;

        public Person() { }
        public Person(string name, Color favoriteColor)
        {
            this.name = name;
            this.favoriteColor = favoriteColor;
        }

        public string Name
        {
            get { return this.name; }
            set { this.name = value; }
        }

        public Color FavoriteColor
        {
            get { return this.favoriteColor; }
            set { this.favoriteColor = value; }
        }
    }
}

Gitmek için çağrı NavigationWindow.Navigate yöntemi olarak demonstrated göre 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="SDKSample.HomePage"
  WindowTitle="Page that Navigates to an Object">


...


<Hyperlink Name="hyperlink" Click="hyperlink_Click">
  Navigate to Nancy Davolio
</Hyperlink>


...


</Page>

Namespace SDKSample
    Partial Public Class HomePage
        Inherits Page
        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub hyperlink_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Dim person As New Person("Nancy Davolio", Colors.Yellow)
            Me.NavigationService.Navigate(person)
        End Sub
    End Class
End Namespace
using System.Windows; // RoutedEventArgs
using System.Windows.Controls; // Page
using System.Windows.Media; // Colors

namespace SDKSample
{
    public partial class HomePage : Page
    {
        public HomePage()
        {
            InitializeComponent();
        }

        void hyperlink_Click(object sender, RoutedEventArgs e)
        {
            Person person = new Person("Nancy Davolio", Colors.Yellow);
            this.NavigationService.Navigate(person);
        }
    }
}

The following figure shows the result.

Bir sınıfa giden sayfa

Bu rakamdan yararlı bir şey görüntülendiğini görebilirsiniz. Aslında, görüntülenen değeri dönüş değeridir ToString yöntemi kişi nesne; Varsayılan olarak, bu yalnızca, değerine WPF kullanarak temsil etmek, nesne. Geçersiz kılmak ToString yöntemine geri dönmek daha anlamlı bilgi rağmen onu hala olması bir dize değeri. Sunu yeteneklerini yararlanır bir tekniği kullanarak WPF olduğu için kullanılacak bir veri şablonu. Veri şablonu uygulayabilir, WPF ilişkilendirmek bir nesne belirli bir türü. Veri şablonu için aşağıdaki kod gösterir Person nesne.

<Application
    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.App"
    StartupUri="HomePage.xaml">

  <Application.Resources>

    <!-- Data Template for the Person Class -->
    <DataTemplate DataType="{x:Type local:Person}">
      <TextBlock xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation">
        <TextBlock FontWeight="Bold">Name:</TextBlock>
        <TextBlock Text="{Binding Path=Name}" />
        <LineBreak />
        <TextBlock FontWeight="Bold">Favorite Color:</TextBlock>
        <TextBlock Text="{Binding Path=FavoriteColor}" />
      </TextBlock>
    </DataTemplate>

  </Application.Resources>

</Application>

Burada, veri şablonu ilişkili olduğu Person türü kullanarak x:Type İşaretleme uzantısında DataType özniteliği. Veri şablonu sonra bağlar TextBlock öğeleri (bkz: TextBlock) özelliklerine Person sınıfa Güncelleştirilmiş görünümünü aşağıdaki şekilde gösterilmiştir Person nesne.

Veri şablonu bulunan bir sınıfa gitme

Bu tekniğin tutarlılık avantajlıdır nesneleri sürekli olarak herhangi bir uygulamada görüntülemek için veri şablonu yeniden çalışabilme tarafından kazanmak.

Veri şablonları hakkında daha fazla bilgi için bkz: Veri Şablonu Özeti.

Security

WPFGezinti destek veren XBAPs geçtiğiniz için ve Internet üzerinden sağlar uygulamaları için ana bilgisayar üçüncü taraf içeriği. Uygulamaların ve kullanıcıların zararlı davranışından korumak için WPF sağlayan güvenlik özellikleri açıklanan çeşitli Güvenlik (WPF) ve WPF Kısmi Güven Güvenliği.

Ayrıca bkz.

Başvuru

SetCookie

GetCookie

Kavramlar

Uygulama Yönetimine Genel Bakış

WPF İçinde URI'leri Paketleme

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

Gezinti Topolojilerine Genel Bakış

Bir WPF Uygulamasının Dağıtılması (WPF)

Diğer Kaynaklar

Gezinti Nasıl Yapılır Konuları