Inheritance: FrameworkElement, IContentPresenter, IContentPresenterOverrides
Beispiel #1
0
 protected override void OnApplyTemplate()
 {
     base.OnApplyTemplate();
     marker = GetTemplateChild("PART_Marker") as ContentPresenter;
     // Make sure ManipulationMode="All" for the graphic drawn in the DataTemplate
     marker.ManipulationDelta += marker_ManipulationDelta;
 }
 void Switch(int index, ContentPresenter frame)
 {
     switch (index)
     {
         case 0:
             if (!(frame.Content is AllVideosPivotItem))
                 frame.Content = new AllVideosPivotItem();
             break;
         case 1:
             if (!(frame.Content is ShowsPivotItem))
                 frame.Content = new ShowsPivotItem();
             break;
         case 2:
             if (!(frame.Content is CameraRollPivotItem))
                 frame.Content = new CameraRollPivotItem();
             break;
         case 3:
             if (frame.Content is SearchVideoPage)
             {
                 Switch((int)Locator.SettingsVM.VideoView, frame);
                 Locator.VideoLibraryVM.SearchTag = "";
             }
             else
                 frame.Content = new SearchVideoPage();
             break;
     }
 }
        public MainPage()
        {

           
            VerifToken();
           
            SettingsPane.GetForCurrentView().CommandsRequested -= _CommandsRequested;
            this.InitializeComponent();
            this.ChangeCalendar.Content = IConstantes.BUTTON_SWITCH_CALENDAR;
            this.Day.Content = IConstantes.BUTTON_DAY;
            this.Week.Content = IConstantes.BUTTON_WEEK;
            this.Month.Content = IConstantes.BUTTON_MONTH;

            _dateMain = DateTime.Now;
            icalendar = new WeekBorderCalendar(ref _dateMain);
            contenuPage.Content = icalendar;
            contentPage = contenuPage;
            ObservableCollection<object> list = new ObservableCollection<object>();
            this._calendars = list.ToObservableVector<object>();

           

            if (first)
            {
                SettingsPane.GetForCurrentView().CommandsRequested += _CommandsRequested;
                first = false;
            }
        }
Beispiel #4
0
		internal DataGridRow(DataGrid dataGrid, object item)
		{
			Item = item;
			DataGrid = dataGrid;
			
			var x = 0;
			var hasStar = false;
			foreach (var c in dataGrid.Columns)
			{
				var cell = c.GenerateElement(item);

                var content = new ContentPresenter();
                content.Content = cell.Control;
                content.Margin = new Thickness(10, 0, 0, 5);
                content.Tag = cell; 

				SetColumn(content, x++);
				Children.Add(content);
			
				var def = c.CreateGridColumnDefinition();
				hasStar = hasStar || def.Width.IsStar;
				ColumnDefinitions.Add(def);
			}

			if (!hasStar)
				ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });

			// second row used for details view
			RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
			RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
		}
Beispiel #5
0
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            content = (ContentPresenter)GetTemplateChild("content");
            content.Content = Content;
        }
Beispiel #6
0
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            _backButton = GetTemplateChild("backButton") as AppBarButton;
            if (_backButton != null)
            {
                _backButton.Click += OnBackClicked;
            }

            _presenter = GetTemplateChild("presenter") as Windows.UI.Xaml.Controls.ContentPresenter;

            _commandBar = GetTemplateChild("CommandBar") as CommandBar;
#if WINDOWS_UWP
            _bottomCommandBarArea = GetTemplateChild("BottomCommandBarArea") as Border;
            _topCommandBarArea    = GetTemplateChild("TopCommandBarArea") as Border;

            if (_commandBar != null && _bottomCommandBarArea != null && _topCommandBarArea != null)
            {
                // We have to wait for the command bar to load so that it'll be in the control hierarchy
                // otherwise we can't properly move it to wherever the toolbar is supposed to be
                _commandBar.Loaded += (sender, args) => UpdateToolbarPlacement();
            }
#endif

            TaskCompletionSource <CommandBar> tcs = _commandBarTcs;
            tcs?.SetResult(_commandBar);
        }
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            _contentPresenter = GetTemplateChild("PART_ContentPresenter") as ContentPresenter;

            OnShowChanged();
        }
 public void Put(ContentPresenter cp)
 {
     if (cp == null)
         System.Diagnostics.Debugger.Break();
     Canvas.SetTop(cp, -1000);
     cp.Content = null;
     _cpList.Enqueue(cp);
 }
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            _contentPresenter = GetTemplateChild("ContentPresenter") as WContentPresenter;

            UpdateBackgroundColor();
            UpdateBorderRadius();
        }
Beispiel #10
0
        protected override void OnApplyTemplate()
        {
            _content = base.GetTemplateChild("content") as ContentPresenter;
            _clip = base.GetTemplateChild("clip") as RectangleGeometry;

            _transform = _content.RenderTransform as CompositeTransform;

            base.OnApplyTemplate();
        }
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            _canvasControl = GetTemplateChild(CanvasControlPartName) as CanvasControl;
            if (_canvasControl != null)
                _canvasControl.Draw += Draw;

            _contentPresenter = GetTemplateChild(ContentPresenterPartName) as ContentPresenter;
        }
Beispiel #12
0
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            _contentPresenter = GetTemplateChild("ContentPresenter") as WContentPresenter;
            _rootGrid         = GetTemplateChild("RootGrid") as Windows.UI.Xaml.Controls.Grid;

            UpdateBackgroundColor();
            UpdateBorderRadius();
        }
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            //Check to see if there's a header, and realize the element if there is one
            if(!string.IsNullOrEmpty(Header))
            {
                _header = (ContentPresenter)GetTemplateChild("HeaderPresenter"); //This will realize the element
            }
        }
Beispiel #14
0
		protected override void OnApplyTemplate()
		{
			base.OnApplyTemplate();

#if WINDOWS_UWP
			_contentPresenter = GetTemplateChild("ContentPresenter") as WContentPresenter;	
#else
			_border = GetTemplateChild("Border") as Border;
#endif
			UpdateBackgroundColor();
			UpdateBorderRadius();
		}
Beispiel #15
0
        protected override void OnApplyTemplate()
        {
            _frame = base.GetTemplateChild("frame") as Grid;
            _webView = base.GetTemplateChild("webView") as WebView;
            _glass = base.GetTemplateChild("glass") as Grid;

            _container = base.GetTemplateChild("container") as Grid;
            _header = base.GetTemplateChild("header") as ContentPresenter;
            _footer = base.GetTemplateChild("footer") as ContentPresenter;
            _asideLeft = base.GetTemplateChild("asideLeft") as ContentPresenter;
            _asideRight = base.GetTemplateChild("asideRight") as ContentPresenter;

            _clip = base.GetTemplateChild("clip") as RectangleGeometry;

            _progress = base.GetTemplateChild("progress") as ProgressRing;

            _webView.NavigationStarting += OnNavigationStarting;
            _webView.NavigationCompleted += OnNavigationCompleted;
            _webView.ScriptNotify += OnScriptNotify;

            _glass.ManipulationStarting += OnGlassManipulationStarting;
            _glass.ManipulationStarted += OnGlassManipulationStarted;
            _glass.PointerPressed += OnGlassPointerPressed;

            _header.PointerWheelChanged += OnPointerWheelChanged;
            _footer.PointerWheelChanged += OnPointerWheelChanged;
            _asideLeft.PointerWheelChanged += OnPointerWheelChanged;
            _asideRight.PointerWheelChanged += OnPointerWheelChanged;

            _header.ManipulationStarted += OnAdornManipulationStarted;
            _footer.ManipulationStarted += OnAdornManipulationStarted;
            _asideLeft.ManipulationStarted += OnAdornManipulationStarted;
            _asideRight.ManipulationStarted += OnAdornManipulationStarted;

            _header.ManipulationDelta += OnAdornManipulationDelta;
            _footer.ManipulationDelta += OnAdornManipulationDelta;
            _asideLeft.ManipulationDelta += OnAdornManipulationDelta;
            _asideRight.ManipulationDelta += OnAdornManipulationDelta;

            _header.ManipulationCompleted += OnAdornManipulationCompleted;
            _footer.ManipulationCompleted += OnAdornManipulationCompleted;
            _asideLeft.ManipulationCompleted += OnAdornManipulationCompleted;
            _asideRight.ManipulationCompleted += OnAdornManipulationCompleted;

            _header.SizeChanged += AdornSizeChanged;
            _footer.SizeChanged += AdornSizeChanged;
            _asideLeft.SizeChanged += AdornSizeChanged;
            _asideRight.SizeChanged += AdornSizeChanged;

            this.SizeChanged += OnSizeChanged;

            base.OnApplyTemplate();
        }
Beispiel #16
0
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

#if WINDOWS_UWP
            _contentPresenter = GetTemplateChild("ContentPresenter") as WContentPresenter;
#else
            _border = GetTemplateChild("Border") as Border;
#endif
            UpdateBackgroundColor();
            UpdateBorderRadius();
        }
        public void Show(Type viewType)
        {
            var attr = viewType.GetTypeInfo().GetCustomAttribute<InPlaceDialogContainerAttribute>();
            var child = (UIElement)Activator.CreateInstance(viewType);

            this.contentPresenter = Window.Current.Content.FindVisualChildren<ContentPresenter>().FirstOrDefault(cp => cp.Name == attr.ContentPresenterName) ?? this.contentPresenter;

            if (this.contentPresenter != null)
            {
                this.previousContent = this.contentPresenter.Content;
                this.contentPresenter.Content = child;
            }
        }
Beispiel #18
0
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            headerPresenter = GetTemplateChild("headerPresenter") as ContentPresenter;
            if (headerPresenter != null)
            {
                headerPresenter.RegisterPropertyChangedCallback(ContentPresenter.ContentProperty, new DependencyPropertyChangedCallback(OnHeaderPresenterContentChanged));
            }
            else
            {
                Debug.Assert(false, "headerpresenter is missing.");
            }
        }
 private void SwitchBetweenViewsButton_Loaded(object sender, RoutedEventArgs e)
 {
     parent = GetContentPresenter();
     if (IsArtistAlbumsList(parent))
     {
         SwitchBetweenViewsButton.Label = "Tracks";
         SwitchBetweenViewsGlyph.Glyph = App.Current.Resources["DropdownSymbol"].ToString();
     }
     else
     {
         SwitchBetweenViewsGlyph.Glyph = App.Current.Resources["AlbumDiscSymbol"].ToString();
         SwitchBetweenViewsButton.Label = "Albums";
     }
 }
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            _LeftContainer = GetTemplateChild("LeftContainer") as Grid;
            _LeftContentContainer = GetTemplateChild("LeftContentContainer") as Grid;
            _LeftTextBlock = GetTemplateChild("LeftText") as TextBlock;
            _RightContainer = GetTemplateChild("RightContainer") as Grid;
            _RightContentContainer = GetTemplateChild("RightContentContainer") as Grid;
            _RightTextBlock = GetTemplateChild("RightText") as TextBlock;
            _ContentContainer = GetTemplateChild("ContentContainer") as Grid;
            _RightContent = GetTemplateChild("RightContent") as ContentPresenter;
            _LeftContent = GetTemplateChild("LeftContent") as ContentPresenter;

            WireAnimations();
            WireManipulation();
        }
Beispiel #21
0
        internal DataGridRow(DataGrid dataGrid, object item)
        {
            Item = item;
            DataGrid = dataGrid;

            var x = 0;
            var hasStar = false;
            foreach (var c in dataGrid.Columns)
            {
                var cell = c.GenerateElement(item);

                var content = new ContentPresenter();
                content.Content = cell.Control;
                //content.ContentTemplate = dataGrid.CellTemplate;
                content.Margin = new Thickness(10, 0, 0, 5); // TODO: Use template and remove margin
                content.Tag = cell;

                SetColumn(content, x++);
                Children.Add(content);

                var def = c.CreateGridColumnDefinition();
                hasStar = hasStar || def.Width.IsStar;

                ColumnDefinitions.Add(def);
            }

            if (!hasStar)
                ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });

            // second row used for details view
            RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
            RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });

            Loaded += delegate
            {
                if (DataGrid.SelectionMode == SelectionMode.Single)
                {
                    if (DataGrid.SelectedItem != null)
                        IsSelected = DataGrid.SelectedItem.Equals(item);
                }
                else
                {
                    if (DataGrid.SelectedItems != null)
                        IsSelected = DataGrid.SelectedItems.Contains(item);
                }
            };
        }
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            _presenter = GetTemplateChild("presenter") as Windows.UI.Xaml.Controls.ContentPresenter;

            _titleViewPresenter = GetTemplateChild("TitleViewPresenter") as FrameworkElement;

            _commandBar = GetTemplateChild("CommandBar") as CommandBar;


            _toolbarPlacementHelper.Initialize(_commandBar, () => ToolbarPlacement, GetTemplateChild);

            TaskCompletionSource <CommandBar> tcs = _commandBarTcs;

            tcs?.SetResult(_commandBar);
        }
        protected override async void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            _backgroundFxImage = this.GetTemplateChild("BackgroundFxImage") as Image;
            _foregroundFxImage = this.GetTemplateChild("ForegroundFxImage") as Image;
            _contentPresenter = this.GetTemplateChild("ContentPresenter") as ContentPresenter;
            _renderedGrid = this.GetTemplateChild("RenderedGrid") as Grid;

            if (_renderedGrid != null)
            {
                _renderedGrid.SizeChanged += this.OnContentPresenterSizeChanged;
            }

            if (_renderedGrid.ActualHeight > 0)
            {
                await this.UpdateFx();
            }
        }
 void Switch(int index, ContentPresenter frame)
 {
     switch (index)
     {
         case 0:
             if (!(frame.Content is AllVideosPivotItem))
                 frame.Content = new AllVideosPivotItem();
             break;
         case 1:
             if (!(frame.Content is ShowsPivotItem))
                 frame.Content = new ShowsPivotItem();
             break;
         case 2:
             if (!(frame.Content is CameraRollPivotItem))
                 frame.Content = new CameraRollPivotItem();
             break;
     }
 }
Beispiel #25
0
        protected override void OnApplyTemplate()
        {
            rootBorder = (Border) GetTemplateChild(PART_ROOT_BORDER);
            rootGrid = (Grid) GetTemplateChild(PART_ROOT_GRID);
            backButton = (Button) GetTemplateChild(PART_BACK_BUTTON);
            dialogGrid = (Grid) GetTemplateChild(PART_DIALOGGRID);
            contentPresenter = (ContentPresenter) GetTemplateChild(PART_CONTENT);

            BackButtonVisibility = Visibility.Visible;

            ResizeContainers();

            if (backButton != null)
                backButton.Click += BackButton_Click;

            Window.Current.SizeChanged += OnWindowSizeChanged;
            Unloaded += OnUnloaded;

            base.OnApplyTemplate();
        }
Beispiel #26
0
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            _backButton = GetTemplateChild("backButton") as AppBarButton;
            if (_backButton != null)
            {
                _backButton.Click += OnBackClicked;
            }

            _presenter = GetTemplateChild("presenter") as Windows.UI.Xaml.Controls.ContentPresenter;

            _commandBar = GetTemplateChild("CommandBar") as CommandBar;

            TaskCompletionSource <CommandBar> tcs = _commandBarTcs;

            if (tcs != null)
            {
                tcs.SetResult(_commandBar);
            }
        }
Beispiel #27
0
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            _backButton = GetTemplateChild("backButton") as AppBarButton;
            if (_backButton != null)
            {
                _backButton.Click += OnBackClicked;
            }

            _presenter = GetTemplateChild("presenter") as Windows.UI.Xaml.Controls.ContentPresenter;

            _commandBar = GetTemplateChild("CommandBar") as CommandBar;

#if WINDOWS_UWP
            _toolbarPlacementHelper.Initialize(_commandBar, () => ToolbarPlacement, GetTemplateChild);
#endif

            TaskCompletionSource <CommandBar> tcs = _commandBarTcs;
            tcs?.SetResult(_commandBar);
        }
Beispiel #28
0
        public void HorizontalCenterElements(ButtonBase btn, Viewbox symbolView, ContentPresenter contentPresenter, IconPosition iconPos, double iconInterval)
        {
            if (symbolView == null || contentPresenter == null)
                return;

            switch (iconPos)
            {
                case IconPosition.Left:
                    symbolView.Margin = new Thickness(CalculateMarginWidth(btn, symbolView, contentPresenter, iconInterval), 0, 0, 0);
                    break;
                case IconPosition.Right:
                    symbolView.Margin = new Thickness(0, 0, CalculateMarginWidth(btn, symbolView, contentPresenter, iconInterval), 0);
                    break;
                case IconPosition.Top:
                    symbolView.Margin = new Thickness(0, CalculateMarginHeight(btn, symbolView, contentPresenter, iconInterval), 0, 0);
                    break;
                case IconPosition.Bottom:
                    symbolView.Margin = new Thickness(0, 0, 0, CalculateMarginHeight(btn, symbolView, contentPresenter, iconInterval));
                    break;
            }
        }
Beispiel #29
0
        protected override void OnApplyTemplate()
        {
            if (_masterPresenter != null)
            {
                // Despite itself being unparented when the template changes, the presenters' children still think they're
                // parented and so the new presenters throw when the content is assigned to them.
                _masterPresenter.Content = null;
                _masterPresenter         = null;
            }

            if (_detailPresenter != null)
            {
                _detailPresenter.Content = null;
                _detailPresenter         = null;
            }

            if (_popup != null)
            {
                _popup.Closed -= OnPopupClosed;
                _popup         = null;
            }

            base.OnApplyTemplate();

            _masterPresenter = GetTemplateChild("masterPresenter") as Windows.UI.Xaml.Controls.ContentPresenter;
            _detailPresenter = GetTemplateChild("detailPresenter") as Windows.UI.Xaml.Controls.ContentPresenter;
            _txbTitle        = GetTemplateChild("txbTitle") as TextBlock;
            _grd             = GetTemplateChild("grdToolbar") as Windows.UI.Xaml.Controls.Grid;

            _popup = GetTemplateChild("popup") as Popup;
            if (_popup != null)
            {
                _popup.Closed += OnPopupClosed;
            }

            UpdateMaster();
            UpdateDetail();
            UpdateTitle();
            UpdateToolbar();
        }
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            _backButton = GetTemplateChild("backButton") as AppBarButton;
            if (_backButton != null)
            {
                _backButton.Click += OnBackClicked;
            }

            _presenter = GetTemplateChild("presenter") as Windows.UI.Xaml.Controls.ContentPresenter;

            _commandBar = GetTemplateChild("CommandBar") as CommandBar;
#if WINDOWS_UWP
            _bottomCommandBarArea = GetTemplateChild("BottomCommandBarArea") as Border;
            _topCommandBarArea    = GetTemplateChild("TopCommandBarArea") as Border;
            UpdateToolbarPlacement();
#endif

            TaskCompletionSource <CommandBar> tcs = _commandBarTcs;
            tcs?.SetResult(_commandBar);
        }
 void Switch(int index, ContentPresenter frame)
 {
     switch (index)
     {
         case 0:
             if (!(frame.Content is AlbumCollectionBase))
                 frame.Content = new AlbumCollectionBase();
             break;
         case 1:
             if (!(frame.Content is ArtistCollectionBase))
                 frame.Content = new ArtistCollectionBase();
             break;
         case 2:
             if (!(frame.Content is SongsPivotItem))
                 frame.Content = new SongsPivotItem();
             break;
         case 3:
             if (!(frame.Content is PlaylistPivotItem))
                 frame.Content = new PlaylistPivotItem();
             break;
     }
 }
        private bool CreateCells(object item)
        {
            var columnIndex = 0;
            var hasStar = false;
            foreach (var column in DataGrid.Columns)
            {
                var cell = column.CreateCell(item);
                cell.Control.Tag = cell;
                cell.Control.DataContext = item; 

                var cellControl = new ContentPresenter();
                cellControl.Content = cell;
                cellControl.ContentTemplate = DataGrid.CellTemplate;

                SetColumn(cellControl, columnIndex++);
                Children.Add(cellControl);

                var columnDefinition = column.CreateGridColumnDefinition();
                hasStar = hasStar || columnDefinition.Width.IsStar;

                ColumnDefinitions.Add(columnDefinition);
            }
            return hasStar;
        }
Beispiel #33
0
		private void BuildUp()
		{
			var x = 0;
			var hasStar = false; 

			titleRowControl.ColumnDefinitions.Clear();
			foreach (var c in Columns)
			{
				var title = new ContentPresenter();
				title.Content = c;
				title.ContentTemplate = HeaderTemplate;

				title.Tapped += OnTapped; 
				
				Grid.SetColumn(title, x++);
				titleRowControl.Children.Add(title);

				var def = c.CreateGridColumnDefinition();
				hasStar = hasStar || def.Width.IsStar;
				titleRowControl.ColumnDefinitions.Add(def);
			}

			if (!hasStar)
				titleRowControl.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });

			UpdateItemsSource();
			SelectColumn(Columns[DefaultOrderIndex]);
		}
        private async Task<bool> NavigateCore(
            Type sourcePageType, object parameter, NavigationMode navigationMode)
        {
            _isNavigating = true;
            this.CanNavigate = false;
            this.CanGoBack = false;
            this.CanGoForward = false;
            this.IsHitTestVisible = false;

            // Make sure we run on UI thread
            if (!Dispatcher.HasThreadAccess)
            {
                Task<bool> navigateCoreTask = null;
                await Dispatcher.RunAsync(
                    CoreDispatcherPriority.High,
                    () => navigateCoreTask = NavigateCore(sourcePageType, parameter, navigationMode));
                return await navigateCoreTask;
            }

            try
            {
                await _waitForApplyTemplateTaskSource.Task;
                await this.WaitForLoadedAsync();
                AlternativePage currentPage = null;

                #region OnNavigatingFrom part
                if (_currentPagePresenter != null)
                {
                    currentPage = (AlternativePage)_currentPagePresenter.Content;
                    var cancelArgs =
                        new AlternativeNavigatingCancelEventArgs(
                            navigationMode,
                            sourcePageType);
                    await this.OnNavigating(cancelArgs);

                    if (!cancelArgs.Cancel)
                    {
                        await currentPage.OnNavigatingFromInternal(cancelArgs);
                    }

                    if (cancelArgs.Cancel)
                    {
                        return false;
                    }
                }
                #endregion

                #region Initializing new page instance part
                var je = new JournalEntry { SourcePageType = sourcePageType, Parameter = parameter };
                AlternativePage newPage;
                ContentPresenter newPagePresenter;

                if (_preloadedPageCache.ContainsKey(je))
                {
                    newPagePresenter = _preloadedPageCache[je];
                    newPage = (AlternativePage)newPagePresenter.Content;
                    _preloadedPageCache.Remove(je);
                }
                else
                {
                    newPage = _frameCache.Get(je.SourcePageType);

                    if (newPage == null)
                    {
                        throw new InvalidOperationException(
                            "Pages used in AlternativeFrame need to be of AlternativePage type.");
                    }

                    newPage.Frame = this;
                    newPagePresenter = new ContentPresenter { Style = PagePresenterStyle };
                    newPagePresenter.Content = newPage;
                    _pagePresentersPanel.Children.Add(newPagePresenter);
                }

                newPagePresenter.Opacity = 0.005;

                await UnloadAllPreloaded();
                #endregion

                #region OnNavigatingTo part
                var args = new AlternativeNavigationEventArgs(
                            newPage.Content, navigationMode, je.Parameter, je.SourcePageType);
                await newPage.OnNavigatingToInternal(args);
                #endregion

                #region Journal Bookeeping part
                switch (navigationMode)
                {
                    case NavigationMode.New:
                        this.ForwardStack.Clear();

                        if (this.CurrentJournalEntry != null)
                        {
                            this.BackStack.Push(this.CurrentJournalEntry);
                        }

                        break;
                    case NavigationMode.Forward:
                        this.ForwardStack.Pop();

                        if (this.CurrentJournalEntry != null)
                        {
                            this.BackStack.Push(this.CurrentJournalEntry);
                        }

                        break;
                    case NavigationMode.Back:
                        this.BackStack.Pop();

                        if (this.CurrentJournalEntry != null)
                        {
                            this.ForwardStack.Push(this.CurrentJournalEntry);
                        }

                        break;
                }

                this.CurrentJournalEntry = je;
                #endregion

                #region OnNavigated~() calls
                await this.OnNavigated(args);

                if (currentPage != null)
                {
                    await currentPage.OnNavigatedFromInternal(args);
                }

                await newPage.OnNavigatedToInternal(args);
                #endregion

                #region Transition part
                await newPagePresenter.WaitForLoadedAsync();
                await newPagePresenter.WaitForNonZeroSizeAsync();

                if (this.ShouldWaitForImagesToLoad == true &&
                    newPage.ShouldWaitForImagesToLoad != false ||
                    newPage.ShouldWaitForImagesToLoad == true &&
                    this.ShouldWaitForImagesToLoad != false)
                {
                    await newPage.WaitForImagesToLoad(WaitForImagesToLoadTimeout);
                }

                newPagePresenter.Opacity = 1.0;

                if (navigationMode == NavigationMode.Back)
                {
                    await TransitionBackward(
                        currentPage,
                        newPage,
                        _currentPagePresenter,
                        newPagePresenter);
                }
                else
                {
                    await TransitionForward(
                        currentPage,
                        newPage,
                        _currentPagePresenter,
                        newPagePresenter);
                }

                if (_currentPagePresenter != null)
                {
                    _pagePresentersPanel.Children.Remove(_currentPagePresenter);
                    _frameCache.Store(currentPage);
                }

                _currentPagePresenter = newPagePresenter;
                #endregion

                return true;
            }
            finally
            {
                this.IsHitTestVisible = true;
                _isNavigating = false;
                this.CanNavigate = true;
                this.CanGoBack = this.BackStack.Count > 0;
                this.CanGoForward = this.ForwardStack.Count > 0;
                //DC.TraceLocalized(GetNavigationState());
            }
        }
        /// <summary>
        /// Reads and restores the navigation history of a Frame from a provided serialization string.
        /// </summary>
        /// <param name="navigationState">
        /// The serialization string that supplies the restore point for navigation history.
        /// </param>
        /// <returns></returns>
        public async Task SetNavigationState(string navigationState)
        {
            try
            {
                Debug.Assert(navigationState[0] == '1');
                Debug.Assert(navigationState[1] == ',');
                int parseIndex = 2;
                var totalPages = ParseNumber(navigationState, ref parseIndex);

                this.BackStack.Clear();
                this.ForwardStack.Clear();
                this.CurrentJournalEntry = null;

                if (_currentPagePresenter != null)
                {
                    var currentPage = _currentPagePresenter.Content as AlternativePage;

                    if (currentPage != null)
                    {
                        _frameCache.Store(currentPage);
                    }

                    _pagePresentersPanel.Children.Remove(_currentPagePresenter);
                    _currentPagePresenter = null;
                }

                if (totalPages == 0)
                {
                    this.CurrentJournalEntry = null;
                    await UnloadAllPreloaded();
                    return;
                }

                var backStackDepth = ParseNumber(navigationState, ref parseIndex);

                var reversedForwardStack = new List<JournalEntry>(totalPages - backStackDepth);

                for (int i = 0; i < totalPages; i++)
                {
                    var je = ParseJournalEntry(navigationState, ref parseIndex);

                    Debug.WriteLine("Type: {0}, Param: {1}", je.SourcePageType, je.Parameter);
                    if (i < backStackDepth)
                    {
                        this.BackStack.Push(je);
                    }
                    else
                    {
                        reversedForwardStack.Add(je);
                    }
                }

                reversedForwardStack.Reverse();

                foreach (var journalEntry in reversedForwardStack)
                {
                    this.ForwardStack.Push(journalEntry);
                }

                var forwardJournalEntry = this.ForwardStack.Peek();

                await NavigateCore(
                    forwardJournalEntry.SourcePageType,
                    forwardJournalEntry.Parameter,
                    NavigationMode.Forward);
            }
            catch (Exception ex)
            {
                throw new ArgumentException("Could not deserialize frame navigation state.", "navigationState", ex);
            }
        }
        /// <summary>
        /// Preloads a page of the specified source page type.
        /// </summary>
        /// <remarks>
        /// Allows to preload a page before user navigates to it, so if it does get navigated to - shows up quickly.
        /// If another page gets navigated to - the preloaded page will be released or cached depending on its NavigationCacheMode property.
        /// </remarks>
        /// <param name="sourcePageType">Type of the source page.</param>
        /// <param name="parameter">The parameter.</param>
        /// <returns></returns>
        public async Task<bool> Preload(Type sourcePageType, object parameter)
        {
            var je = new JournalEntry { SourcePageType = sourcePageType, Parameter = parameter };

            if (_preloadedPageCache.ContainsKey(je))
            {
                return true;
            }

            var cp = new ContentPresenter { Style = PagePresenterStyle };
            var newPage = _frameCache.Get(sourcePageType);

            Debug.Assert(newPage != null, "Pages used in AlternativeFrame need to be of AlternativePage type.");

            if (newPage == null)
            {
                return false;
            }

            newPage.Frame = this;
            cp.Content = newPage;
            cp.Opacity = 0.005;
            Canvas.SetZIndex(cp, int.MinValue);
            _pagePresentersPanel.Children.Insert(0, cp);
            _preloadedPageCache.Add(je, cp);
            await newPage.PreloadInternal(parameter);
            cp.Opacity = 0;

            return true;
        } 
        private async Task TransitionBackward(
            AlternativePage currentPage,
            AlternativePage newPage,
            ContentPresenter previousPagePresenter,
            ContentPresenter newPagePresenter)
        {
            var transition = currentPage != null ? (currentPage.PageTransition ?? this.PageTransition) : this.PageTransition;

            if (transition != null)
            {
                if (currentPage != null)
                {
                    await currentPage.OnTransitioningFromInternal();
                }

                if (newPage != null)
                {
                    await newPage.OnTransitioningToInternal();
                }

                await transition.TransitionBackward(previousPagePresenter, newPagePresenter);

                if (currentPage != null)
                {
                    await currentPage.OnTransitionedFromInternal();
                }

                if (newPage != null)
                {
                    await newPage.OnTransitionedToInternal();
                }
            }
        }
        public async Task<bool> GoBack()
        {
            if (_isNavigating)
            {
                throw new InvalidOperationException("Navigation already in progress.");
            }

            _isNavigating = true;
            this.CanNavigate = false;
            this.CanGoBack = false;

            try
            {
                await this.WaitForLoadedAsync();
                AlternativePage currentPage = null;
                var currentJe = this.BackStack.Pop();
                var je = BackStack.Peek();

                if (_currentPagePresenter != null)
                {
                    currentPage = (AlternativePage)_currentPagePresenter.Content;
                    var cancelArgs =
                        new AlternativeNavigatingCancelEventArgs(
                            NavigationMode.Back,
                            je.Type);
                    await currentPage.OnNavigatingFromInternal(cancelArgs);

                    if (cancelArgs.Cancel)
                    {
                        this.BackStack.Push(currentJe);
                        return false;
                    }
                }

                AlternativePage newPage;
                ContentPresenter newPagePresenter;

                if (_preloadedPageCache.ContainsKey(je))
                {
                    newPagePresenter = _preloadedPageCache[je];
                    newPage = (AlternativePage)newPagePresenter.Content;
                    _preloadedPageCache.Remove(je);
                }
                else
                {
                    newPage = (AlternativePage)Activator.CreateInstance(je.Type);
                    newPage.Frame = this;
                    newPagePresenter = new ContentPresenter { Style = PagePresenterStyle };
                    newPagePresenter.Content = newPage;
                    _pagePresentersPanel.Children.Add(newPagePresenter);
                }

                newPagePresenter.Opacity = 0.005;

                await UnloadPreloadedPages();

                var args = new AlternativeNavigationEventArgs(
                    newPage.Content, NavigationMode.New, je.Parameter, je.Type);
                await newPage.OnNavigatingToInternal(args);

                await newPagePresenter.WaitForLoadedAsync();
                await newPagePresenter.WaitForNonZeroSizeAsync();
                newPagePresenter.Opacity = 1.0;

                if (this.PageTransition != null)
                {
                    await this.PageTransition.TransitionBackward(_currentPagePresenter, newPagePresenter);
                }

                if (currentPage != null)
                {
                    await currentPage.OnNavigatedFromInternal(args);
                    _pagePresentersPanel.Children.Remove(_currentPagePresenter);
                }

                _currentPagePresenter = newPagePresenter;

                await newPage.OnNavigatedToInternal(args);

                return true;
            }
            finally
            {
                _isNavigating = false;
                this.CanNavigate = true;
                this.CanGoBack = this.BackStack.Count > 1;
            }
        }
        // Allows to preload a page before user navigates to it, so if it does get navigated to - it is quick.
        public async Task Preload(Type sourcePageType, object parameter)
        {
            var je = new JournalEntry {Type = sourcePageType, Parameter = parameter};

            if (_preloadedPageCache.ContainsKey(je))
            {
                return;
            }

            var cp = new ContentPresenter {Style = PagePresenterStyle};
            var newPage = (AlternativePage)Activator.CreateInstance(sourcePageType);
            newPage.Frame = this;
            cp.Content = newPage;
            cp.Opacity = 0.005;
            Canvas.SetZIndex(cp, int.MinValue);
            _pagePresentersPanel.Children.Insert(0, cp);
            _preloadedPageCache.Add(je, cp);
            await newPage.PreloadInternal(parameter);
        }
Beispiel #40
0
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            //Single click/tap on header
            relMainPanel = (Windows.UI.Xaml.Controls.RelativePanel)GetTemplateChild("HeaderPanel");
            if (relMainPanel != null)
            {
                relMainPanel.Tapped += (object sender, TappedRoutedEventArgs e) =>
                {
                    if (!headerToolContentTapped)
                    {
                        IsExpanded = !IsExpanded;
                        setExpandState(IsExpanded);
                    }
                    else
                    {
                        headerToolContentTapped = !headerToolContentTapped;
                    }
                };
            }

            //Single click/tap on header
            headerToolContent = (Windows.UI.Xaml.Controls.ContentPresenter)GetTemplateChild("HeaderToolContent");
            if (headerToolContent != null)
            {
                headerToolContent.Tapped += (object sender, TappedRoutedEventArgs e) =>
                {
                    headerToolContentTapped = true;
                };
            }

            //Toggle button
            toggleExpander = (Windows.UI.Xaml.Controls.Primitives.ToggleButton)GetTemplateChild("ExpandCollapseButton");
            if (toggleExpander != null)
            {
                toggleExpander.Click += (object sender, RoutedEventArgs e) =>
                {
                    IsExpanded = !IsExpanded;
                    setExpandState(IsExpanded);
                    //IsExpanded = !IsExpanded;
                    //toggleExpander.IsChecked = IsExpanded;
                    //changeVisualState(_useTransitions);
                };
            }

            //Fill with content
            contentElement = (FrameworkElement)GetTemplateChild("Content");
            if (contentElement != null)
            {
                _collapsedState = (VisualState)GetTemplateChild("Collapsed");
                if ((_collapsedState != null) && (_collapsedState.Storyboard != null))
                {
                    _collapsedState.Storyboard.Completed += (object sender, object e) =>
                    {
                        contentElement.Visibility = Visibility.Collapsed;
                    };
                }
            }
            changeVisualState(false);
        }