نظرة عامة حول التنقل

Windows Presentation Foundation (WPF) يدعم المستعرض نمط صواب يمكن استخدامها في نوعين من التطبيقات: مستقل والتطبيقات تطبيقات مستعرض XBAP (XBAP). صواب حزمة محتوى التنقل، WPF يوفر Page class. يمكنك التنقل من واحد Page صواب آخر بشكل إلزامي, باستخدام Hyperlink ، أو برمجي, باستخدام NavigationService.WPF يستخدم اليومية صواب تذكر الصفحات التي قد تم الانتقال من و صواب انتقل مرة أخرى صواب لهم.

Page ،Hyperlink ،NavigationService ، و اليومية النموذج هو صواب الدعم المقدمة من قبلWPF. نظرة عامة حول هذا استكشاف هذه الميزات بالتفصيل قبل تغطي الدعم التنقل المتقدم الذي يتضمن التنقل إلى فقدان Extensible Application Markup Language (XAML) ملفات ، HTML ، والملفات الكائنات.

ملاحظةملاحظة

في هذا الموضوع يشير مصطلح "المستعرض" فقط على المستعرضات التي يمكن استضافتها WPF التطبيقات وتشمل حالياً برنامج Internet Explorer 7 ، برنامج Microsoft Internet Explorer 6 ، و Firefox 2.0 +.حيث معينة WPF ميزات معتمدة فقط في مستعرض معين, تتم الإشارة إصدار المستعرض صواب.

يشتمل هذا الموضوع على الأقسام التالية.

  • التنقل في تطبيقات WPF
  • NavigationWindow صواب
  • الإطار صواب
  • صواب المضيفين
  • الانتقال إلى المحتوى غير XAML صواب
  • الأمان
  • موضوعات ذات صلة

التنقل في تطبيقات WPF

يوفر هذا الموضوع نظرة عامة حول المفتاح صواب قدرات في WPF. تتوفر هذه القدرات على كل من تطبيقات مستقل تطبيقات XBAP ، على الرغم من أن هذا صواب يقدم ضمن السياق XBAP.

ملاحظةملاحظة

لا يناقش هذا الموضوع كيفية إنشاء ونشرها تطبيقات XBAP.لمزيد من المعلومات حول تطبيقات XBAP راجع نظرة عامة حول تطبيقات مستعرض WPF XAML.

توضح هذه المقالة هذا المقطع كما يوضح الأوجه التالية صواب:

  • تطبيق صواب

  • تكوين ابدأ صواب

  • تكوين صواب's مضيف عنوان العرض والارتفاع

  • الارتباط التشعبي صواب

  • جزء بلغة صواب

  • صواب خدمة

  • التنقل البرمجي صواب خدمة التنقل

  • التنقل صواب

  • تذكر التنقل صواب دفتر اليومية

  • عمر صواب "و" دفتر اليومية

  • الاحتفاظ حالة المحتوى صواب التنقل المحفوظات

  • ملفات تعريف الارتباط

  • التنقل مصنفة

تطبيق صواب

في WPF ، يمكنك التنقل إلى عدة أنواع المحتوى التي تتضمن NET Framewor. الكائنات أو كائنات مخصصة أو قيم التعداد عناصر تحكم المستخدم XAML الملفات، و HTML الملفات. ومع ذلك، سوف تجد التي الأكثر شيوعاً ملائمة الطريقة صواب حزمة المحتوى باستخدام Page. علاوة على ذلك، Page بتنفيذ الميزات الخاصة التنقل صواب لتحسين مظهرها وتبسيط التطوير.

باستخدام Page ، يمكنك بشكل إلزامي تنفيذ صفحة قابل للتنقل من XAML المحتوى باستخدام صواب مثل التالية.

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

Page التي يتم تنفيذها في علامات XAML لها Page كعنصر الجذر الخاصة به ويتطلب تصريح مساحة اسمWPFXML. Page يحتوي العنصر على المحتوى الذي تريد صواب التنقل صواب. عرض يمكنك إضافة محتوى عن طريق إعداد Page.Content صواب عنصر كما هو موضح في العلامات التالية.

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

Page.Content يمكن أن يحتوي فقط على صواب; في المثال السابق، المحتوى واحدة سلسلة "مرحباً ، الصفحة!" في التدريب العملي، سيتم عادةً استخدام عنصر تحكم تخطيط عنصر تابع (راجع تخطيط النظام) صواب تتضمن ثم إنشاء محتوى.

العناصر التابعة Page تعتبر عنصر صواب تكون المحتويات Page و وبالتالي، لا تحتاج صواب استخدام صريحة Page.Content تعريف. التالى يكافئ علامات السابقة.

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

في هذه الحالة، Page.Content يتم تعيينها تلقائياً صواب العناصر التابعة Page العنصر. لمزيد من المعلومات، راجع طراز محتوى WPF.

A صواب-فقط Page مفيد لعرض المحتوى. ومع ذلك، Page يمكن أيضاً عرض عناصر التحكم التي تسمح للمستخدمين بالتفاعل صواب الصفحة وهو يمكن الاستجابة تفاعل المستخدم بواسطة معالجة الأحداث استدعاء منطق التطبيق. تفاعلي Page تطبيق باستخدام تركيبة من صواب و التعليمات البرمجية الخلفية, كما هو موضح في المثال التالي

<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();
        }
    }
}

للسماح صواب ملف وملف التعليمات البرمجية الخلفية للعمل معاً مطلوب التكوين التالي:

  • في العلامات ، فإن العنصر Page يجب أن يتضمن سمة x:Class. عند بناء التطبيق ، فإن وجود x:Class في ملفات العلامات يسبب Microsoft build engine (MSBuild) لإنشاء فئة partial المشتقة من Page و لها الاسم المحدد بواسطة السمة x:Class. يتطلب هذا إضافة تصريح مساحة الاسم XML من أجل مخطط XAML ( xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"). partial بتنفيذ الفئة التي تم إنشاؤها InitializeComponent ، والذي يسمى صواب تسجيل الأحداث وتعيين خصائص الذي يتم تنفيذه في العلامات.

  • في التعليمات البرمجية الخلفية يجب أن تكون الفئة فئة partial بنفس الاسم المحدد بواسطة السمة x:Class في العلامات ، ويجب اشتقاقها من Page. يسمح ملف التعليمات البرمجية الخلفية هذا بأن يتم اقترانه بفئة partial التي يتم إنشاءها من أجل ملف العلامات عند إنشاء التطبيق (راجع إنشاء تطبيق WPF (WPF)).

  • في تعليمات برمجية-خلف Pageيجب أن يقوم تطبيق فئة الدالة الإنشائية الذي يستدعي InitializeComponentالأسلوب. InitializeComponentهو مطبقة بترميز إنشاء ملفpartialفئة الأحداث regهوter وتعيين خصائص التي تم تعريفها في العلامة.

ملاحظةملاحظة

عند إضافة جديد Page صواب المشروع الخاص بك باستخدام Microsoft Visual Studio ، تظهر Page يتم تطبيق باستخدام كل من "العلامات" و "التعليمات البرمجية الخلفية ويتضمن التكوين الضرورية صواب إنشاء الاقتران بين العلامات والتعليمات البرمجية - خلف الملفات كما هو موضح هنا.

بمجرد أن يكون لديك Page ، يمكنك التنقل صواب it. صواب تحديد الأول Page التي تنتقل تطبيق صواب ، تحتاج صواب تكوين البدء Page.

تكوين ابدأ صواب

تطبيقات XBAP تتطلب مقدار معين من البنية التحتية التطبيق صواب تتم استضافتها في المستعرض. في WPF ، تظهر Application الفئة جزء من صواب الذي يؤسس البنية التحتية التطبيق المطلوب (راجع نظرة عامة حول إدارة التطبيق).

يتم عادةً تطبيق تعريف تطبيق خاص باستخدام كل من "العلامات" و "التعليمات البرمجية الخلفية صواب الملف العلامات تكوين على أنها MSBuild ApplicationDefinition العنصر. تعريف تطبيق لـ يكون التالي 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 { }
}

XBAP يمكن استخدام تعريف التطبيق الخاص به لتحديد للبدء Page ، وهو Page التي يتم تحميلها عند تلقائياً XBAP تشغيل. يمكنك القيام بذلك عن طريق إعداد StartupUri الخاصية صواب معرف موارد منتظم (URI) للحصول المطلوب Page.

ملاحظةملاحظة

في معظم الحالات، Page يتم تحويلها برمجياً إلى أو نشر صواب التطبيقات.في هذه الحالات، URI التي تعرّف Page هو صواب URI ، والذي هو URI التي تتوافق مع نظام صواب .صواب معرفات URI تمت مناقشتها إضافية فيحزمة ال URIفى WPF . يمكنك أيضاً التنقل محتوى باستخدام نظام http الموضحة أدناه.

يمكنك تعيين StartupUri بشكل إلزامي في العلامات كما هو موضح في المثال التالي.

<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" />

في ترتيب هو سبيل المثال، StartupUriسمة هو تعيين مع يحزم نسبي URIالتي تعرف صفحة رئيسية.xaml. عند XBAPهو تشغيل صفحة رئيسية.xaml هو navigated تلقائياً إلى dهوplayed. هذا هو هو موضّح بواسطة الشكل التالي الذي يعرض XBAP الذي تم تشغيل صواب ملقم ويب.

صفحة XBAP

ملاحظةملاحظة

للحصول على مزيد من المعلومات المتعلقة تطوير ونشر تطبيقات XBAP راجع نظرة عامة حول تطبيقات مستعرض WPF XAML و نشر أحد تطبيقات WPF (WPF).

تكوين صواب's مضيف عنوان العرض والارتفاع

شيء واحد قد يكون لديك ملاحظة من الشكل السابق التي صواب كل من "المستعرض" و "علامة التبويب لوحة يعتبر URI للحصول XBAP. بالإضافة إلى يتم طويل ، صواب لا جذابة ولا تكون فيه معلومات. لهذا السبب، Page يقدم طريقة إلى قم بتغيير العنوان بواسطة صواب WindowTitle الخاصية. علاوة على ذلك، يمكنك تكوين عرض وارتفاع إطار المستعرض عن طريق إعداد WindowWidth و WindowHeight على الترتيب.

WindowTitle, WindowWidthو WindowHeightمن الممكن أن توضع بشكل تصريحي في العلامات كما في المثال التالي .

<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>

يتم عرض النتيجة في الشكل التالي.

عنوان النافذة وارتفاعها وعرضها

الارتباط التشعبي صواب

نموذجية XBAP تشمل العديد صواب. إن أبسط طريقة صواب التنقل من صفحة واحدة صواب آخر صواب استخدام Hyperlink. يمكنك إضافة بشكل إلزامي Hyperlink صواب Page باستخدام Hyperlink عنصر الذي يظهر في العلامة التالية.

<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>

Hyperlink صواب يتطلب التالية:

  • صواب URI من Page للانتقال إلى ، كما هو محدد بواسطة NavigateUri السمة.

  • المحتوى الذي يمكن للمستخدم النقر فوق صواب بدء التنقل مثل النص والصور (المحتوى التي Hyperlink يمكن أن تحتوي على العنصر, راجع Hyperlink).

يظهر الشكل التالي XBAP صواب Page له Hyperlink.

صفحة بها ارتباط تشعبي

كما التي تتوقع بالنقر فوق Hyperlink يتسبب XBAP للانتقال إلى Page هي معرّفة من قبل NavigateUri صواب. بالإضافة إلى ذلك، XBAP إضافة إدخال السابق Page إلى الحديثة صواب قائمة في برنامج Internet Explorer 7. يظهر هذا في التعليمات البرمجية التالية.

الزران "الخلف" و"الأمام"

بالإضافة إلى دعم التنقل من واحد Page صواب آخر, Hyperlink يدعم أيضاً جزء التنقل.

جزء بلغة صواب

جزء التنقل يتم التنقل إلى جزء محتوى إما صواب Page أو آخر Page. في WPF ، جزء محتوى هو محتوى موجود بواسطة المسماة صواب. عنصر مسمى عبارة عن عنصر يحتوي على به Name صواب. مجموعة إظهار العلامات التالية مسماة TextBlock صواب يحتوي على جزء المحتويات.

<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>

للحصول على Hyperlink صواب التنقل صواب جزء محتوى NavigateUri يجب أن تتضمن السمة التالية:

  • URI من Page صواب جزء المحتوى للانتقال إلى.

  • حرف

  • اسم العنصر على Page الذي يحتوي على جزء المحتوى.

جزء URI يحتوي على التنسيق التالية.

PageURI# ElementName

يُظهر التالية مثال Hyperlink مكوّن صواب التنقل صواب جزء المحتويات.

<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>
ملاحظةملاحظة

يصف هذا القسم تطبيق التنقل الجزء الافتراضي في WPF.WPFيسمح لك أيضا إلى تطبيق نظام التنقل الجزء الخاص بك الذي يتطلب معالجة جزئيا،NavigationService.FragmentNavigationحدث.

ملاحظة هامةهام

يمكنك الانتقال إلى أجزاء في فقدان XAML الصفحات (العلامات فقط XAML الملفات صواب Page كـ العنصر الجذر) فقط إذا كان يمكن أن يكون استعراض الصفحات بواسطة HTTP.

ومع ذلك، غير المحكم XAML التنقل عبر صفحة صواب الأجزاء الخاصة به.

صواب خدمة

أثناء Hyperlink يسمح للمستخدم صواب بدء التنقل صواب معينة Page ، يتم تنفيذ العمل من تحديد موقع ثم تحميل الصفحة قبل NavigationService class. بشكل أساسي, NavigationService يوفر إمكانية صواب معالجة طلب تنقل بالنيابة عن العميل البرمجية، مثل Hyperlink. بالإضافة إلى ذلك، NavigationService بتنفيذ دعم عالية المستوى تعقب تؤثر صواب الطلب.

عند Hyperlink النقر فوق WPF المكالمات NavigationService.Navigate إلى موقع تنزيل Page المحددة صواب URI. التي تم تحميلها Page يتم تحويل صواب شجرة كائنات الكائن الجذر الخاص بها عبارة عن مثيل من تم تحميلها Page. مرجع جذر Page تخزين الكائن في NavigationService.Content صواب. حزمة URI لـ يتم تخزين المحتوى الذي تم الانتقال إليه في NavigationService.Source صواب ، أثناء NavigationService.CurrentSource بتخزين الحزمة URI للحصول على آخر صفحة تم الانتقال إليه.

ملاحظةملاحظة

من الممكن WPF التطبيق صواب يكون لديك أكثر من واحد نشط حالياً NavigationService.(لمزيد من المعلومات، راجع موارد إضافية لاحقًا في هذا الموضوع.)

التنقل البرمجي صواب خدمة التنقل

لا تحتاج صواب معرفته حول NavigationService إذا تنفيذ التنقل بشكل إلزامي في استخدام العلامات Hyperlink ، لأن Hyperlink يستخدم NavigationService على behalf. وهذا يعني أنه ، طالما إما مباشرة أو غير مباشر الأصل Hyperlink مضيف تنقل (راجع Hosts التنقل) ، Hyperlink سيتمكن صواب البحث عن استخدام الخدمة التنقل المضيف التنقل صواب معالجة على طلب التنقل.

ولكن، هناك حالات عندما تحتاج صواب استخدام NavigationService مباشرةً، بما في ذلك التالي:

  • عندما تحتاج إلى إنشاء مثيل Page باستخدام غير افتراضي صواب.

  • عندما تحتاج صواب بتعيين الخصائص Page قبل الانتقال صواب it.

  • عند Page التي يحتاج صواب يمكن الانتقال صواب يمكن تحديد فقط في وقت التشغيل.

في هذه الحالات، تحتاج صواب كتابة التعليمات البرمجية صواب برمجياً بدء التنقل عن طريق استدعاء Navigate أسلوب NavigationService الكائن. يتطلب الحصول على مرجع صواب NavigationService.

الحصول على مرجع صواب NavigationService

لأسباب تغطي Hosts التنقل المقطع، WPF يمكن أن يكون التطبيق لديك أكثر من NavigationService. وهذا يعني أن التعليمات البرمجية في حاجة لطريقة للعثور ‏‎NavigationService,وهو عادة NavigationServiceالذي يتم الانتقال صواب Page الحالي .يمكنك الحصول على مرجع NavigationServiceعن طريق استدعاء طريقه static NavigationService.GetNavigationService صواب الحصول على NavigationService الذي يتم الانتقال صواب معينة Page ، تمرير مرجع صواب Page كوسيطة من GetNavigationService الأسلوب. التعليمة البرمجية التالية يوضح كيفية صواب الحصول على NavigationService الحالي 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);

كاختصار البحث عن NavigationService للحصول Page ، Page بتنفيذ NavigationService الخاصية. كما هو موضح في المثال التالي:

' 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;
ملاحظةملاحظة

Page يمكن فقط الحصول على مرجع صواب به NavigationService عند Page رفع Loaded الحدث.

التنقل البرمجي صواب كائن صفحة

يظهر المثال التالي كيفية استخدام NavigationService برمجياً الانتقال إلى Page. مطلوب التنقل البرمجي لأن Page وهو يتم الانتقال إليه يمكن فقط أن يكون إنشاء باستخدام واحدة غير افتراضي صواب. Page مع المُنشئ غير افتراضي يظهر في العلامات و التالية التعليمات البرمجية.

<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 التي تنتقل إلى Page صواب المُنشئ غير افتراضي يظهر في العلامات و التالية التعليمات البرمجية.

<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);
        }
    }
}

عند Hyperlinkتشغيل هذه Pageهو النقر فوقه، تنقل يتم تهيئتها بواسطة instantiating Pageل التنقل إلى استخدام المنشئ غير افتراضي واستدعاء NavigationService.Navigateالأسلوب. Navigateيقبل مرجع إلى الكائن الذيNavigationServiceسوف تنتقل إلى، بدلاً من يحزمURI.

التنقل البرمجي صواب حزمة URI

إذا كنت بحاجة إلى إنشاء صواب URI برمجياً (عندما يمكنك فقط تحديد صواب URI في تشغيل الوقت، على سبيل المثال) ، يمكنك استخدام NavigationService.Navigate الأسلوب. كما هو موضح في المثال التالي:

<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);
        }
    }
}

html/add2fav.htm

Page لن يتم تحميل إذا كان له نفس حزمة URI كـ الحزمة URI التي يتم تخزينها في NavigationService.Source الخاصية. فرض WPF لتحميل صواب الصفحة مرة أخرى "، يمكنك إجراء مكالمة NavigationService.Refresh أسلوب كما هو موضح في المثال التالي.

<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();
        }
    }
}

التنقل صواب

هناك العديد من الطرق صواب بدء التنقل، كما التي رأيتها. عند صواب بدء و أثناء صواب هو قيد التقدم، يمكنك تعقب ثم يؤثر صواب باستخدام الأحداث التالية قبل NavigationService:

  • Navigating. يحدث عند التنقل الجديد هو المطلوبة. يمكن استخدام من أجل صواب التنقل.

  • NavigationProgress. تحدث بشكل دوري أثناء ينزّل إلى توفير معلومات التقدم التنقل.

  • Navigated. يحدث عندما يتم تحديد موقع الصفحة و تنزيلها.

  • NavigationStopped. يحدث عند التنقل هو توقف (بواسطة استدعاء StopLoading)، أو عند التنقل الجديد هو المطلوبة أثناء تنقل الحالي هو في التقدم.

  • NavigationFailed. يحدث عند حدوث خطأ هو raهوed أثناء التنقل إلى المحتوى المطلوب.

  • LoadCompleted. يحدث عندما يتم تم تحميله المحتوى الذي تم الانتقال إلى و تحليل، و بدأ رسم هندسي.

  • FragmentNavigation. يحدث عند بدء التنقل إلى جزء محتوى الذي يحدث:

    • مباشرةً، إذا كان الجزء المطلوب في صواب المحتوى.

    • بعد المصدر صواب تحميل ، إذا كان الجزء المطلوب في مختلفة صواب.

صواب يتم رفع أحداث في الترتيب المبين بواسطة الشكل التالي.

الرسم التخطيطي لتدفق تنقل الصفحة

بشكل عام Page غير مهتم هذه الأحداث. فمن المحتمل concerned تطبيق صواب هذه و لهذا السبب, تشغيل تلك الأحداث أيضاً بواسطة Application الفئة:

كل مرة NavigationServiceرفع حدث ما، Applicationيرفع فئة الحدث المطابق. Frame and NavigationWindow offer the same events to detect navigation within their respective scopes.

في بعض الحالات، Page قد تُهمك هذه الأحداث. على سبيل المثال، Page قد معالجة NavigationService.Navigating الحدث صواب تحديد ما إذا كان صواب إلغاء التنقل بعيداً عن نفسه. كما هو موضح في المثال التالي:

<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;
        }
    }
}

إذا قمت بتسجيل معالج صواب حدث تنقل من Page ، إلغاء مثلما المثال السابق الذي يجب أيضاً تسجيل معالج الأحداث. إذا لم تقم بذلك، قد يكون هناك تأثيرات جانبية صواب مراعاة كيف WPF يتذكر التنقل Page التنقل باستخدام دفتر اليومية.

تذكر التنقل صواب دفتر اليومية

WPF يستخدم مكدسات اثنين إلى تذكر صواب التي انتقلت من: مكدس خلفي و صواب المكدس. عند الانتقال من صواب Page إلى جديد Page أو للأمام موجودة Page ، تظهر صواب Page إضافة إلى نسخ مكدس . عند الانتقال من صواب Page مرة أخرى إلى السابق Page ، تظهر صواب Page إضافة إلى مكدس للأمام . مكدس خلفي مكدس للأمام والوظائف صواب إدارتها, تتم الإشارة ككل صواب كـ اليومية. لكل عنصر في مكدس خلفي وتكدس إلى الأمام مثيل JournalEntry الفئة و ويشار صواب مثل إدخال دفتر اليومية .

التنقل صواب من Internet Explorer 7

المفهوم، اليومية يعمل بالطريقة نفسها الأزرار الخلف و الأمام في برنامج Internet Explorer 7do. هذه موضحة في الشكل التالي.

الزران "الخلف" و"الأمام"

للحصول على تطبيقات XBAP التي يتم استضافتها بواسطة برنامج Internet Explorer 7 ، WPF بدمج اليومية في صواب واجهة المستخدم برنامج Internet Explorer 7. يسمح هذا للمستخدمين للنقل الصفحات في ‏‎XBAPباستخدام للخلف , للأمامالصفحات الاخيره في أزرار برنامج Internet Explorer 7 .دفتر اليوميات غير متجمع داخل برنامج Microsoft Internet Explorer 6 بنفس طريقه برنامج Internet Explorer 7. بدلاً من ذلك، WPF يعرض بديل صواب واجهة المستخدم.

ملاحظة هامةهام

في برنامج Internet Explorer 7 و عند تنقل مستخدم بعيداً عن و إلى XBAP ، فقط إدخالات دفتر اليومية عن صواب التي لم يتم الاختفاظ الحياة يتم الاحتفاظ بها في دفتر اليومية.للحصول على مناقشة على الاحتفاظ صواب الحياة ، راجع مدة تواجد الصفحة "و" دفتر اليومية لاحقًا في هذا الموضوع. 

بشكل افتراضي صواب عن كل Page الذي يظهر في قائمة أحدث الصفحات برنامج Internet Explorer 7 هو URI للحصول Page. في كثير من الحالات، هذا غير ذات معنى خاص صواب المستخدم. ولحسن الحظ، يمكنك تغيير صواب باستخدام أحد الخيارات التالية:

  1. المرفقة JournalEntry.Name صواب قيمة.

  2. Page.Title صواب قيمة.

  3. Page.WindowTitle صواب قيمة و URI الحالي Page.

  4. URI الحالي Page. (افتراضي)

يطابق الترتيب الذي يتم ترتيبها الخيارات ترتيب الأسبقية عن البحث عن النص. على سبيل المثال، إذا JournalEntry.Name يتم تعيين يتم تجاهل القيم الأخرى.

يستخدم المثال التالي Page.Title السمة صواب تغيير النص الذي يظهر إدخال دفتر اليومية.

<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
    {


...


    }
}

التنقل صواب استخدام WPF

على الرغم من أنه يمكن لمستخدم التنقل اليومية باستخدام السابقو للأمامو صواب الأخيرة في برنامج Internet Explorer 7 ، يمكنك أيضاً التنقل اليومية استخدام آليات كل التعريفي و البرمجي يوفرها WPF. سبب واحد للقيام بذلك في توفير مخصص صواب واجهات المستخدم في الصفحات.

يمكنك إضافة دفتر اليومية بشكل إلزامي صواب يعتمد باستخدام صواب الأوامر التي تم كشفها بواسطة NavigationCommands. يوضح المثال التالي كيفية استخدام BrowseBack صواب الأمر.

<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>

يمكنك التنقل بشكل برمجي صواب باستخدام أحد من الأعضاء التاليين NavigationService الفئة:

دفتر اليومية يمكن أيضاً يمكن معالجته برمجياً ، كما تمت مناقشته في حالة المحتوى الحدائق مع "محفوظات التنقل" لاحقًا في هذا الموضوع.

عمر صواب "و" دفتر اليومية

خذ بعين الاعتبار XBAP مع عدة صواب التي تحتوي على محتوى غني بما في ذلك الرسومات الحركات و الوسائط. أثر الذاكرة لـ صواب مثل قد تكون هذه تماماً كبيرة الحجم، خاصة إذا الفيديو وتستخدم الوسائط الصوت. كهدف أن دفتر اليومية "يحتفظ" الصفحات التي تم الانتقال صواب ، مثل XBAP بسرعة قد تستهلك على مقدار كبير و ملحوظًا من الذاكرة.

لهذا السبب، صواب السلوك يومية لتخزين Page بيانات التعريف في كل إدخال دفتر اليومية بدلاً من مرجع إلى Page الكائن. عند الانتقال إدخال دفتر يومية صواب ، به Page يتم استخدام بيانات التعريف صواب إنشاء مثيل جديد من المحدد Page. كما واقتران كل Page الانتقال الذي يحتوي صواب التي يتم توضيح بواسطة الشكل التالي.

مدة بقاء الصفحة

على الرغم من استخدام صواب يمكن حفظ سلوك عمل اليومية على استهلاك الذاكرة ، الأداء التقديم في الصفحة قد يتم تخفيض; reinstantiating Page يمكن أن يكون وقت المكثفة ، خاصة إذا كان لديه عدد كبير من المحتوى. إذا كنت تحتاج صواب الاحتفاظ Page مثيل في دفتر اليومية ، يمكنك رسم على جهازي التقنيات الخاصة بإجراء so. أولاً، يمكنك برمجياً التنقل صواب Page الكائن قبل استدعاء NavigationService.Navigate الأسلوب.

ثانياً، يمكنك تحديد ذلك WPF الاحتفاظ مثيل Page في دفتر اليومية عن طريق تعيين KeepAlive الخاصية صواب true (الافتراضي false). يمكنك تعيين KeepAlive بشكل إلزامي في العلامات كما هو موضح في المثال التالي.

<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>

العمر Page وهو المحافظة على الحياة يختلف بسيط صواب أحد not. وفي أول مرة Page التي يتم الاحتفاظ به خلالها يتم الانتقال صواب ، إنشاء تماماً مثل Page التي يتم الاحتفاظ نشاط غير. ومع ذلك، لأن مثيل Page يتم الاحتفاظ في صواب, فإنه يتم أبداً إنشاء مرة أخرى عن طالما أن يبقى في صواب. وبالتالي، إذا Page يحتوي على منطق تسلسل التهيئة الذي يجب أن يتم استدعاء كل مرة Page هو الانتقال إلى ، يجب نقله صواب المُنشئ إلى معالج لهذا Loaded الحدث. كما هو موضح في الشكل التالي Loaded و Unloaded تشغيل الحدث الأحداث لا يزال من كل مرة Page يتم الانتقال صواب من ، على التوالي.

عندما يتم رفع الأحداث المحملة وغير المحملة

عند Page يتم يتم الاختفاظ الحياة, يجب عدم القيام واحداً مما يلي:

  • تخزين مرجع أو أي جزء منها.

  • تسجيل معالجات الأحداث صواب الأحداث التي لم يتم تطبيق به.

القيام منهما سيقوم بإنشاء مراجع فرض Page صواب يتم الاحتفاظ بها في الذاكرة, حتى بعد إزالته من دفتر اليومية.

بشكل عام، يجب أن تفضل الافتراضي Page سلوك لا يتم الاحتفاظ Page الحياة. على الرغم من ذلك، قام صواب تبعاته التي تمت مناقشتها في المقطع التالي.

الاحتفاظ حالة المحتوى صواب التنقل المحفوظات

إذا Page لا يتم الاحتفاظ الحياة ، و عناصر تحكم تجميع صواب من المستخدم ، ما يحدث صواب إذا كان مستخدم يتنقل بعيداً عن و إلى Page ؟ من أحد المستخدمين تواجه منظور ، يجب أن تتوقع المستخدم راجع صواب إدخالها مسبقاً. لسوء الحظ، لأن مثيل جديد من Page يتم إنشاء صواب كل التنقل يتم reinstantiated عناصر التحكم التي يتم تجميعها البيانات ثم يتم فقدان البيانات الموجودة.

ولحسن الحظ، اليومية توفير دعم تذكر صواب عبر Page تنقلات بما في ذلك التحكم صواب. وبوجه خاص، إدخال دفتر اليومية كل Page يتصرف كحاوية مؤقتة المقترنة Page صواب. توضح الخطوات التالية كيفية استخدام هذا الدعم عند Page يتم الانتقال صواب:

  1. إدخال الحالي Page يتم إضافة صواب دفتر اليومية.

  2. الحالة Page يتم تخزين صواب إدخال دفتر اليومية الخاصة بهذه الصفحة الذي تتم إضافته إلى مكدس خلفي.

  3. جديد Page يتم الانتقال صواب.

عند الصفحة Page الانتقال للخلف صواب ، باستخدام "دفتر اليومية" ، الخطوات التالية تحدث:

  1. Page إنشاء مثيل (إدخال دفتر اليومية العلوي على مكدس خلفي).

  2. Page يتم تحديث صواب الحالة التي تم تخزين صواب إدخال دفتر اليومية Page.

  3. Page الانتقال للخلف صواب.

WPF يستخدم هذا الدعم بشكل تلقائي عند استخدام عناصر التحكم التالية علىPage:

اذا استخدمت Page عناصر التحكم هذه ,فان البيانات المدخله اليهم تسترجع من خلال تنقلات Page كما تعرض من خلال اللون المفضل ListBox في الشكل التالي

صفحة بها عناصر تحكم لتذكر الحالة

عند Page يحتوي على عناصر تحكم غير تلك الموجودة في السابق قائمة أو عند صواب يتم تخزينها في كائنات مخصصة تحتاج إلى كتابة تعليمات برمجية التسبب في دفتر اليومية تذكر صواب عبر Page تنقلات.

إذا كنت بحاجة إلى تذكر أجزاء صغيرة من حالة عبر Page تنقلات ، يمكنك استخدام الخصائص التبعية (راجع DependencyProperty) التي تم تكوينها صواب FrameworkPropertyMetadata.Journal علامة بيانات التعريف.

إذا الحالة التي لديك Page يحتاج إلى تذكر عبر تنقلات تشمل أجزاء متعددة من صواب ، قد تجد أنه أقل رمز كبيرة تغلف الولاية في فئة واحدة ثم تقوم بتطبيق IProvideCustomContentState واجهة.

إذا كنت تحتاج صواب التنقل خلال حالات متنوعة واحد Page ، بدون ووسيلة للتنقل من Page نفسه، يمكنك استخدام IProvideCustomContentState و NavigationService.AddBackEntry.

ملفات تعريف الارتباط

آخر طريقة ذلك WPF التطبيقات تخزين البيانات هو صواب ملفات تعريف الارتباط التي يتم إنشاؤها تحديث وحذف باستخدام SetCookie و GetCookie أساليب. ملفات تعريف الارتباط التي يمكنك إنشاءها في WPF استخدام أنواع تطبيقات ويب الأخرى هذه نفس ملفات تعريف الارتباط; ملفات تعريف الارتباط أجزاء إجبارية صواب التي يتم تخزينها من قبل تطبيق موجود على جهاز عميل أثناء أو عبر جلسات عمل التطبيق. بيانات ملف تعريف الارتباط عادةً يأخذ الشكل صواب / قيمة زوج بالتنسيق التالي.

صواب=قيمة

عندما يتم تمرير البيانات إلى SetCookie ، along صواب Uri الموقع التي يجب تعيينها ملف تعريف الارتباط أو يتم إنشاء ملف تعريف ارتباط في الذاكرة, وهو متوفر فقط المدة الحالية التطبيق جلسة العمل. ويشار إلى هذا النوع من ملف تعريف الارتباط باسم صواب ملف تعريف الارتباط .

تخزين ملف تعريف ارتباط صواب يجب إضافة جلسات عمل التطبيق ، تاريخ انتهاء الصلاحية إلى ملف cookie باستخدام التنسيق التالي.

اسم = قيمه ; expires=DAY, DD-MMM-YYYY HH:MM:SS GMT

ملف تعريف ارتباط صواب تخزين تاريخ انتهاء الصلاحية في الحالي Windows مجلد "ملفات إنترنت المؤقتة" الخاصة التثبيت حتى تنتهي مدة صلاحية ملف تعريف الارتباط. تُعرف مثل ملف تعريف ارتباط الدائمة ملف تعريف الارتباط التي تستخدم خط الهاتف بسبب استمرار عبر جلسات العمل التطبيق.

استعادة صواب جلسة العمل "و" ملفات تعريف الارتباط الدائمة عن طريق استدعاء GetCookie أسلوب تمرير Uri الموقع حيث تم تعيين ملف تعريف الارتباط مع SetCookie الأسلوب.

فيما يلي بعض الطرق معتمدة ملفات تعريف الارتباط في WPF:

  • WPF تطبيقات مستقل وتطبيقات XBAP يمكن كليهما صواب و إدارة ملفات تعريف الارتباط.

  • ملفات تعريف الارتباط التي يتم إنشاؤها بواسطة XBAP يمكن الوصول إليها صواب المستعرض.

  • تطبيقات XBAP من نفس المجال يمكن إنشاء ومشاركتها ملفات تعريف الارتباط.

  • صفحات تطبيقات XBAPو HTML من نفس المجال يمكن إنشاء ومشاركتها ملفات تعريف الارتباط.

  • يتم إرسال ملفات تعريف الارتباط عند تطبيقات XBAP و غير المحكم XAML صواب تأكد ويب طلبات.

  • صواب المستوى الأعلى تطبيقات XBAP و تطبيقات XBAP تتم استضافتها في IFRAMES يمكن الوصول إلى ملفات تعريف الارتباط.

  • دعم ملف تعريف الارتباط في WPF هي نفسها من أجل كافة المستعرضات المعتمدة ( برنامج Internet Explorer 7 ، برنامج Microsoft Internet Explorer 6 ، و Firefox 2.0 +).

  • في برنامج Microsoft Internet Explorer 6 و برنامج Internet Explorer 7 ، إقران النهج P3P التي تنتمي إلى ملفات تعريف الارتباط بواسطة WPF, ، بشكل عملي مع ألخذ في الاعتبار أن الجهة الاولي والجهه الثالثه تطبيقات XBAP..

التنقل مصنفة

إذا كنت بحاجة إلى تمرير صواب من واحد Page إلى آخر، يمكنك تمرير صواب وسائط مُنشئ غير افتراضي Page. لاحظ أنه في حالة استخدام هذه التقنية يجب الحفاظ Page الحياة; إذا لم, في المرة التالية التي انتقلت إلى Page ، WPF reinstantiates Page باستخدام صواب مُنشئ.

بدلاً من ذلك الخاص بك Page يمكن تطبيق خصائص التي تم تعيينها صواب البيانات التي يحتاجها لتمريرها. الأشياء يصبح صعبًا ، ومع ذلك، عندما Page يحتاج صواب لتمرير البيانات مرة أخرى صواب Page الذي يتم الانتقال صواب it. تكون المشكلة أن التنقل لا أصلاً يدعم آليات عن ضمان التي Page سيتم إرجاع صواب بعد الانتقال عنها من. بشكل أساسي, صواب لا يعتمد دلالات استدعاء/العائد. صواب حل هذه المشكلة WPF يوفر PageFunction<T> الفئة التي يمكنك استخدامها صواب تأكد من أن Page يتم إرجاع صواب في توقعاً و مصنفة الشكل. لمزيد من المعلومات، راجع نظرة عامة حول التنقل المهيكل.

قمت بمشاهدة سلسلة الخدمات التنقل التي غالباً استخدام لبناء التطبيقات حتى هذه النقطة صواب محتوى قابل للتنقل. تم مناقشته هذه الخدمات في السياق تطبيقات XBAP ، على الرغم من أنها ليست محدودة صواب تطبيقات XBAP. Windows وأنظمة التشغيل الحديثة التطبيقات الاستفادة من تجربة مستعرض المستخدمين الحديثة لتضمين نمط المستعرض صواب في تطبيقات مستقل. تتضمن الأمثلة الشائعة:

  • قاموس المرادفات Word: الانتقال كلمة الاختيارات.

  • مستكشف الملفات التنقل بين الملفات والمجلدات.

  • معالجات : تقسيم لأسفل مهام معقدة في متعددة صواب التي يمكن أن يكون الانتقال بين. يوجد مثال معالج مكونات Windows التي تعالج عملية إضافة وإزالة Windows الميزات.

لتضمين مستعرض لنمط التنقل في التطبيقات المستقلة الخاصة بك، يمكنك استخدم NavigationWindowفئة. NavigationWindowمشتقة منWindowوتمتد به نفس الدعم للتنقلتطبيقات XBAPتوفر. يمكنك استخدام NavigationWindowكـ أما الإطار الرئيسي للتطبيق المستقل أو كـ ثانوي إطارا مثل كـ صندوق الحوار.

لتطبيق NavigationWindow ، كـ صواب الأكثر الفئات ذات المستوى الأعلى في WPF ( Window ، Page وهكذا) ، استخدام تركيبة من العلامات والتعليمات البرمجية-الخلف. كما هو موضح في المثال التالي:

<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();
        }
    }
}

هذا صواب ينشئ NavigationWindow التي التنقل تلقائياً إلى Page (HomePage.xaml) عند NavigationWindow مفتوح. إذا كان NavigationWindow إطار التطبيق الرئيسي يمكنك استخدام StartupUri صواب لتشغيل it. يظهر هذا في التعليمات البرمجية التالية.

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

يظهر الشكل التالي NavigationWindow كـ الإطار الرئيسي التطبيق المستقل.

نافذة رئيسية

من الشكل ، يمكنك رؤية التي NavigationWindow يحتوي صواب ، حتى لو لم يتم تعيين NavigationWindow تنفيذ التعليمات البرمجية من المثال السابق. بدلاً من ذلك تعيين العنوان باستخدام WindowTitle الخاصية التي تظهر في التعليمات البرمجية التالية.

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


...


</Page>

تعيين WindowWidth و WindowHeight خصائص يؤثر NavigationWindow.

عادةً، تنفيذ الخاصة بك NavigationWindow عندما تحتاج إلى تخصيص السلوك أو مظهر الخاص به. إذا قمت بذلك، لن يمكنك استخدام اختصار. إذا حددت صواب URI من Page كما StartupUri في تطبيق مستقل Application تلقائياً بإنشاء NavigationWindow إلى مضيف Page. تظهر العلامات التالية كيفية صواب تمكين ذلك.

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

إذا كنت تريد إطار تطبيق ثانوي مثل مربع حوار صواب يكون NavigationWindow ، يمكنك استخدام التعليمات البرمجية في المثال التالي صواب فتح it.

            ' 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();

يظهر الشكل التالي النتائج .

مربع حوار

كما يمكنك مشاهدة NavigationWindow يعرض برنامج Internet Explorer 7 - نمط السابق الأمام الأزرار و التي تسمح للمستخدمين للتنقل صواب. توفر هذه الأزرار نفس خبرة المستخدم كما هو موضح في الشكل التالي.

الزران "الخلف" و"الأمام" في NavigationWindow

إذا كان الخاص بك صواب بتوفير الدعم التنقل اليومية و واجهة المستخدم الخاصة بهم, يمكنك إخفاء في السابق الأمام الأزرار و المعروضة بواسطة NavigationWindow بواسطة تعيين القيمة ShowsNavigationUI خاصية false.

بدلاً من ذلك، يمكن استخدام التخصيص صواب في WPF لاستبدال واجهة المستخدم من NavigationWindow نفسه.

الإطار صواب

كل من "المستعرض" و " NavigationWindow هي إطارات التي تستضيف قابل للتنقل صواب. في بعض الحالات، يكون لتطبيقات المحتوى الذي لا تحتاج صواب استضافتها بواسطة إطار بأكمله. بدلاً من ذلك، يمكن استضافتها المحتوى داخل صواب المحتوى. يمكنك إدراج محتوى قابل للتنقل في أي محتوى آخر بواسطة استخدام Frameفئة. Frame provides the same support as NavigationWindow and تطبيقات XBAP.

المثال التالي كيفية صواب إضافة Frame صواب Page بشكل إلزامي باستخدام Frame العنصر.

<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>

تعيين هذه العلامات Source سمة Frame عنصر مع أي حزمة URI للحصول Page التي Frame يجب أولاً الانتقال صواب. يظهر الشكل التالي XBAP مع Page له Frame التي يحتوي الانتقال بين عدة صواب.

إطار تم نقله بين عدة صفحات

لم يكن لديك فقط صواب استخدام Frame داخل المحتويات Page. وهو أيضاً الشائعة صواب لاستضافة Frame داخل المحتويات Window.

افتراضياً، Frame يستخدم فقط الخاصة به صواب في غياب آخر صواب. إذا كان Frame هو جزء من المحتوى الذي تم استضافة داخل إما NavigationWindow أو XBAP ، Frame يستخدم دفتر اليومية التي ينتمي صواب NavigationWindow أوXBAP . في بعض الأحيان، بالرغم من ذلك، Frame قد تحتاج صواب يكون مسؤولاً عن دفتر اليومية الخاصة به. هو سبب واحد بذلك السماح اليومية تنقل ضمن الصفحات التي يتم استضافتها بواسطة Frame. يتم توضيح بواسطة الشكل التالي.

الرسم التخطيطي للإطار والصفحة

في هذه الحالة، يمكنك تكوين Frame صواب استخدام دفتر اليومية الخاصة به بواسطة تعيين JournalOwnership خاصية Frame صواب OwnsJournal. يظهر هذا في التعليمات البرمجية التالية.

<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>

يوضح الرسم التالي التأثير من التنقل ضمن Frame يستخدم دفتر اليومية الخاصة به.

إطار يستخدم دفتر اليومية الخاص به

إشعار تظهر إدخالات دفتر اليومية بواسطة صواب واجهة المستخدم في Frame ، بدلاً من حسب برنامج Internet Explorer 7.

ملاحظةملاحظة

إذا كان Frame هو جزء من المحتوى الذي تتم استضافته في Window ، Frame يستخدم دفتر اليومية الخاصة به ثم وبالتالي، يعرض الخاصة به صواب واجهة المستخدم.

إذا تتطلب خبرة المستخدم Frame صواب توفر دفتر اليومية الخاصة به دون إظهار التنقل واجهة المستخدم ، يمكنك إخفاء شريط التنقل واجهة المستخدم بواسطة تعيين NavigationUIVisibility صواب Hidden. يظهر هذا في التعليمات البرمجية التالية.

<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>

صواب المضيفين

Frame وNavigationWindow يتم الفئات التي تعرف باسم صواب المضيفين. المضيف التنقل التي تستخدم خط الهاتف هي فئة يمكن التنقل صواب عرض المحتوى. صواب إنجاز هذا, يستخدم كل مضيف التنقل الخاص به NavigationService دفتر اليومية. الإنشاء الأساسية من صواب المضيف الموضحة بالرسم التوضيحي التالي.

الرسومات التخطيطية للمتصفح

بشكل أساسي, يسمح هذا NavigationWindow و Frame صواب يوفر الدعم التنقل نفس XBAP يوفر عندما تتم استضافتها في المستعرض.

بالإضافة إلى استخدام NavigationService و أحد دفاتر يومية المضيفين التنقل تنفيذ نفس صواب التي NavigationService implements. يتم توضيح بواسطة الشكل التالي.

دفتر يومية في إطار وفي NavigationWindow

يسمح لك هذا صواب برنامج الدعم التنقل مباشرة مقابل عليها. قد ترغب هذا إذا كنت تحتاج إلى توفير مخصص صواب واجهة المستخدم للحصول Frame التي يتم استضافتها فيWindow . علاوة على ذلك، تطبيق كلا النوعين إضافية ، صواب-المتعلقة أعضاء بما في ذلك BackStack ( NavigationWindow.BackStack ، Frame.BackStack) و ForwardStack ( NavigationWindow.ForwardStack ، Frame.ForwardStack) ، والتي تتيح إمكانية تعداد إدخالات دفتر اليومية في مكدس خلفي "و" للأمام مكدس على التوالي.

كما ذكر سابقاً، صواب مما يمكن أن توجد يومية واحد داخل أحد تطبيقات. يوفر الشكل التالي مثالاً عندما يمكن أن يحدث هذا.

عدة دفاتر يومية بداخل تطبيق واحد

الانتقال إلى المحتوى غير XAML صواب

خلال هذا الموضوع Page و صواب تطبيقات XBAP تم استخدام شرح قدرات التنقل المتنوعة WPF. ومع ذلك، Page غير المترجمة إلى تطبيق ليس النوع الوحيد من صواب التي يمكن أن يتم الانتقال إليه و حزمة تطبيقات XBAP لا تكون الطريقة الوحيدة لتعريف صواب.

كما يوضح هذا القسم أيضًا يمكنك التنقل صواب أنجزتها XAML الملفات، HTML ، والملفات الكائنات.

التنقل صواب أنجزتها XAML الملفات

فقدان XAML الملف ملف صواب الصفات المميزة التالية:

  • يحتوي على XAML (وهذا يعني عدم صواب).

  • يحتوي على تصريح مساحة اسم مناسبة.

  • يحتوي على .xaml صواب ملحق اسم.

على سبيل المثال، ضع في الاعتبار المحتوى التالي يتم تخزينها كـ غير المحكم XAML صواب ، 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>

عند النقر نقراً مزدوجاً فوق الملف المستعرض يفتح وانتقاله صواب ويعرض المحتوى. يظهر هذا في التعليمات البرمجية التالية.

عرض محتوى الملف Person.XAML

يمكنك عرض غير المحكم XAML الملف صواب التالية:

  • موقع ويب على الجهاز المحلي إنترانت، أو صواب.

  • اصطلاح التسمية العالمي (UNC) جعل الملف مشتركا

  • في مربع الحوار خصائص القرص المحلي (

فقدان XAML إضافة ملف صواب المفضلة في المستعرض أو أن تكون الصفحة الرئيسية في المستعرض.

ملاحظةملاحظة

للحصول على صواب المعلومات حول نشر تشغيل XAML راجع صفحات غير المحكم نشر أحد تطبيقات WPF (WPF).

تحديد واحد صواب احترام إلى فقدان XAML هي التي يمكن فقط المضيف المحتوى الذي يتم آمنة في الثقة الجزئية. على سبيل المثال، Window لا يمكن أن يكون العنصر الجذر الخاص فقدان XAML الملف. لمزيد من المعلومات، راجع الأمان ذا الثقة الجزئية الخاص بWPF.

التنقل ملفات HTML صواب باستخدام الإطار

كما قد تتوقع أيضاً يمكنك التنقل صواب HTML. تحتاج ببساطة صواب توفير URI الذي يستخدم نظام http. على سبيل المثال، التالية XAML يظهر Frame التي تنتقل صواب HTML الصفحة.

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

التنقل صواب HTML يتطلب أذونات خاصة. على سبيل المثال، يتعذر التنقل صواب XBAP التي قيد التشغيل في الحماية الأمان ثقة جزئية منطقة إنترنت. لمزيد من المعلومات، راجع الأمان ذا الثقة الجزئية الخاص بWPF.

التنقل ملفات HTML صواب باستخدام التحكم WebBrowser

WebBrowser صواب يدعم HTML المستند التنقل يستضيف البرنامج النصي/إدارة التشغيل المتداخل التعليمات البرمجية. للحصول على معلومات تفصيلية بخصوص WebBrowser التحكم, راجع WebBrowser.

مثل Frame ، navigating صواب HTML استخدام WebBrowser يتطلب أذونات خاصة. على سبيل المثال، من الثقة الجزئية تطبيق، يمكنك التنقل فقط صواب HTML الموجود في موقع أصل. لمزيد من المعلومات، راجع الأمان ذا الثقة الجزئية الخاص بWPF.

الانتقال إلى كائنات مخصص

إذا كان لديك بيانات يتم تخزينها كـ الكائنات المخصصة إحدى طرق عرض البيانات في إنشاء Page صواب المحتوى المرتبط هذه الكائنات (راجع نظرة عامة لربط البيانات). إذا لم تقم تحتاج الزائد لـ إنشاء بالكامل الصفحة فقط صواب لعرض الكائنات ، يمكنك التنقل مباشرة صواب بها بدلاً من ذلك.

خذ بعين الاعتبار Person الفئة التي يتم تنفيذ في التعليمات البرمجية التالية.


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; }
        }
    }
}

صواب التنقل صواب, يمكنك استدعاء NavigationWindow.Navigate الأسلوب كـ demonstrated بواسطة التعليمات البرمجية التالية.

<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);
        }
    }
}

يظهر الشكل التالي النتائج .

صفحة تتنقل إلى فئة

من هذا الشكل، يمكنك رؤية عرض شئ مفيدة. في الحقيقة، القيمة التي يتم عرضها هي قيمة الإرجاع ToString أسلوب الكائن الشخص ; هذا بشكل افتراضي فقط القيمة ذلك WPF يمكن استخدام صواب تمثل الكائن. قد تجاوز ToString أسلوب صواب بإرجاع معلومات ذات معنى أكثر على الرغم من أنه مازال سيتم قيمة سلسلة. أسلوب واحد يمكنك استخدام الاستفادة من قدرات العرض التقديمي WPF هي استخدام صواب قالب. تطبيق قالب بيانات هذا WPF يمكن إقران صواب كائن من نوع معين. إظهار التعليمة البرمجية التالية صواب قالب Person الكائن.

<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>

هنا، صواب قالب مقترن Person نوع باستخدام x:Type ملحق العلامات في DataType السمة. صواب بربط قالب ثم TextBlock عناصر (راجع TextBlock) إلى الخصائص Person class. يظهر الشكل التالي مظهر المحدثة Person الكائن.

التنقل إلى فئة لها قالب بيانات

ميزة هذه التقنية هي التناسق الحصول بواسطة القدرة على إعادة استخدام صواب قالب لعرض الكائنات بشكل متناسق أي مكان في التطبيق الخاص بك.

للحصول على مزيد من المعلومات علي تماذج البيانات ، راجع نظرة عامة حول قولبة البيانات.

الأمان

WPF يسمح الدعم التنقلتطبيقات XBAP إلى الانتقال إليه عبر الإنترنت، يسمح لتطبيقات محتوى جهة خارجية المضيف. صواب حماية التطبيقات والمستخدمين من سلوك ضارة WPF يوفر العديد من ميزات الأمان التي تمت مناقشتها في أمن WPF و الأمان ذا الثقة الجزئية الخاص بWPF.

راجع أيضًا:

المرجع

SetCookie

GetCookie

المبادئ

نظرة عامة حول إدارة التطبيق

حزمة ال URIفى WPF

نظرة عامة حول التنقل المهيكل

نشر أحد تطبيقات WPF (WPF)