FixedHyperLink.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Documents / FixedHyperLink.cs / 1305600 / FixedHyperLink.cs

                            //---------------------------------------------------------------------------- 
// 
//      Copyright (C) 2004 by Microsoft Corporation.  All rights reserved.
// 
// 
// Description:
//      Implements the help class of FixedHyperLink. 
// 
// History:
//      02/04/2005 - Ming Liu(MingLiu) - Created. 
//
//
//---------------------------------------------------------------------------
namespace System.Windows.Documents 
{
    using System; 
    using System.Collections; 
    using System.Collections.Generic;
    using System.Collections.Specialized; 
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Windows.Threading;
    using System.Windows.Markup; 
    using System.Windows.Navigation;
    using System.Windows.Media; 
 
    ///
    ///     The IFixedNavigate interface will be implemented by FixedPage, FixedDocument, 
    ///     and FixedDocumentSequence to support fixed hyperlink.
    ///
    internal interface IFixedNavigate
    { 
        /// 
        /// Find the element which given ID in this document context. 
        ///  
        /// The ID of UIElement to search for
        /// The fixedPage that contains returns UIElement 
        /// 
        UIElement FindElementByID(string elementID, out FixedPage rootFixedPage);

        ///  
        /// Navigate to the element with ID= elementID
        ///  
        ///  
        void NavigateAsync (string  elementID);
    } 

    internal static class FixedHyperLink
    {
        ///  
        ///     NavigationService property ChangedCallback.
        ///  
        public static void OnNavigationServiceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
        {
            FixedDocument fixedContent = d as FixedDocument; 

            if (fixedContent != null)
            {
                NavigationService oldService = (NavigationService) e.OldValue; 
                NavigationService newService = (NavigationService) e.NewValue;
 
                if (oldService != null) 
                {
                    oldService.FragmentNavigation -= new FragmentNavigationEventHandler(FragmentHandler); 
                }

                if (newService != null)
                { 
                    newService.FragmentNavigation += new FragmentNavigationEventHandler(FragmentHandler);
                } 
            } 
        }
 
        /// 
        /// Called by NavigationService to let document content to handle the fragment first.
        /// 
        ///  
        /// 
        internal static void FragmentHandler(object sender, FragmentNavigationEventArgs e) 
        { 
            NavigationService ns = sender as NavigationService;
 
            if (ns != null)
            {
                string fragment = e.Fragment;
                IFixedNavigate fixedNavigate = ns.Content as IFixedNavigate; 

                if (fixedNavigate != null) 
                { 
                    fixedNavigate.NavigateAsync(e.Fragment);
                    e.Handled = true; 
                }
            }
        }
 
        /// 
        /// Fire BringinToView event on the element ID. 
        ///  
        /// The host document of element ID, call any one implents IFixedNavigate
        ///  
        internal static void NavigateToElement(object ElementHost, string elementID)
        {
            FixedPage rootFixedPage = null;
            FrameworkElement targetElement = null; 

            targetElement = ((IFixedNavigate)ElementHost).FindElementByID(elementID, out rootFixedPage) as FrameworkElement; 
 
            if (targetElement != null)
            { 
                if (targetElement is FixedPage)
                {
                    //
                    // For fixedpage, we only need to scroll to page position. 
                    //
                    targetElement.BringIntoView(); 
                } 
                else
                { 
                    //Just passing in raw rect of targetElement.  Let DocumentViewer/Grid handle transforms
                    targetElement.BringIntoView(targetElement.VisualContentBounds);
                }
            } 
            return;
        } 
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK