protected override async void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); if (e.Parameter is Sample sample) { CurrentSample = sample; } if (CurrentSample != null) { // UNO TODO // The controls may be loaded when set directly to their parent // so the datacontext of the renderer needs to be set early. await SetSampleDataContext(); if (CurrentSample.HasType) { try { SamplePage = Activator.CreateInstance(CurrentSample.PageType) as Page; SampleContent.Content = SamplePage; // Some samples use the OnNavigatedTo and OnNavigatedFrom // Can't use Frame here because some samples depend on the current Frame MethodInfo method = CurrentSample.PageType.GetMethod( "OnNavigatedTo", BindingFlags.Instance | BindingFlags.NonPublic); if (method != null) { method.Invoke(SamplePage, new object[] { e }); } } catch (Exception ex) { ExceptionNotification.Show("Sample Page failed to load: " + ex.Message); } if (SamplePage != null) { SamplePage.Loaded += SamplePage_Loaded; // UNO TODO if (SamplePage.IsLoaded) { SamplePage_Loaded(SamplePage, new RoutedEventArgs()); } } } else if (!CurrentSample.HasXAMLCode) { _onlyDocumentation = true; } async Task SetSampleDataContext() { InfoAreaPivot.Items.Clear(); // Load Sample Properties before we load sample (if we haven't before) await CurrentSample.PreparePropertyDescriptorAsync(); // We only have properties on examples with live XAML var propertyDesc = CurrentSample.PropertyDescriptor; DataContext = CurrentSample; if (propertyDesc != null) { _xamlRenderer.DataContext = propertyDesc.Expando; } if (propertyDesc?.Options.Count > 0) { InfoAreaPivot.Items.Add(PropertiesPivotItem); } // Uno todo (Adding a pivot item does not refresh SelectedItem) UpdateXamlRender(CurrentSample.BindedXamlCode); } if (CurrentSample.HasXAMLCode) { #if !HAS_UNO if (AnalyticsInfo.VersionInfo.GetDeviceFormFactor() != DeviceFormFactor.Desktop || CurrentSample.DisableXamlEditorRendering) #endif { // Only makes sense (and works) for now to show Live Xaml on Desktop, so fallback to old system here otherwise. XamlReadOnlyCodeRenderer.SetCode(CurrentSample.UpdatedXamlCode, "xaml"); InfoAreaPivot.Items.Add(XamlReadOnlyPivotItem); } #if !HAS_UNO else { XamlCodeEditor.Text = CurrentSample.UpdatedXamlCode; InfoAreaPivot.Items.Add(XamlPivotItem); _xamlCodeRendererSupported = true; } #endif InfoAreaPivot.SelectedIndex = 0; } if (CurrentSample.HasCSharpCode) { var code = await CurrentSample.GetCSharpSourceAsync(); CSharpCodeRenderer.SetCode(code, "c#"); InfoAreaPivot.Items.Add(CSharpPivotItem); } if (CurrentSample.HasDocumentation) { var contents = await CurrentSample.GetDocumentationAsync(); if (!string.IsNullOrWhiteSpace(contents)) { DocumentationTextBlock.Text = contents; InfoAreaPivot.Items.Add(DocumentationPivotItem); } } // Hide the GitHub button if there isn't a CodeUrl. if (string.IsNullOrEmpty(CurrentSample.CodeUrl)) { GithubButton.Visibility = Visibility.Collapsed; } else { GithubButton.Visibility = Visibility.Visible; } if (InfoAreaPivot.Items.Count == 0) { SidePaneState = PaneState.None; } else { SidePaneState = _onlyDocumentation ? PaneState.Full : PaneState.Normal; } Shell.Current.SetAppTitle($"{CurrentSample.CategoryName} > {CurrentSample.Name}"); } else { ExceptionNotification.Show("Sample does not exist"); } if (!CanChangePaneState) { SampleTitleBar.Children.Remove(NarrowInfoButton); } if (e.NavigationMode != NavigationMode.Back) { var nop = Samples.PushRecentSample(CurrentSample); } }
private async void NavigationFrame_Navigating(object sender, NavigatingCancelEventArgs navigationEventArgs) { ProcessSampleEditorTime(); SampleCategory category; if (navigationEventArgs.SourcePageType == typeof(SamplePicker) || navigationEventArgs.Parameter == null) { DataContext = null; _currentSample = null; category = navigationEventArgs.Parameter as SampleCategory; if (category != null) { TrackingManager.TrackPage($"{navigationEventArgs.SourcePageType.Name} - {category.Name}"); } else { TrackingManager.TrackPage($"{navigationEventArgs.SourcePageType.Name}"); } HideInfoArea(); } else { TrackingManager.TrackPage(navigationEventArgs.SourcePageType.Name); Commands.Clear(); ShowInfoArea(); var sampleName = navigationEventArgs.Parameter.ToString(); _currentSample = await Samples.GetSampleByName(sampleName); DataContext = _currentSample; if (_currentSample == null) { HideInfoArea(); return; } category = await Samples.GetCategoryBySample(_currentSample); await Samples.PushRecentSample(_currentSample); var propertyDesc = _currentSample.PropertyDescriptor; InfoAreaPivot.Items.Clear(); if (propertyDesc != null) { _xamlRenderer.DataContext = propertyDesc.Expando; } Title.Text = _currentSample.Name; if (propertyDesc != null && propertyDesc.Options.Count > 0) { InfoAreaPivot.Items.Add(PropertiesPivotItem); } if (_currentSample.HasXAMLCode) { if (AnalyticsInfo.VersionInfo.GetDeviceFormFactor() != DeviceFormFactor.Desktop) { // Only makes sense (and works) for now to show Live Xaml on Desktop, so fallback to old system here otherwise. XamlReadOnlyCodeRenderer.XamlSource = _currentSample.UpdatedXamlCode; InfoAreaPivot.Items.Add(XamlReadOnlyPivotItem); } else { XamlCodeRenderer.Text = _currentSample.UpdatedXamlCode; InfoAreaPivot.Items.Add(XamlPivotItem); _xamlCodeRendererSupported = true; } InfoAreaPivot.SelectedIndex = 0; } if (_currentSample.HasCSharpCode) { CSharpCodeRenderer.CSharpSource = await this._currentSample.GetCSharpSourceAsync(); InfoAreaPivot.Items.Add(CSharpPivotItem); } if (_currentSample.HasJavaScriptCode) { JavaScriptCodeRenderer.CSharpSource = await this._currentSample.GetJavaScriptSourceAsync(); InfoAreaPivot.Items.Add(JavaScriptPivotItem); } if (!string.IsNullOrEmpty(_currentSample.CodeUrl)) { GitHub.NavigateUri = new Uri(_currentSample.CodeUrl); GitHub.Visibility = Visibility.Visible; } else { GitHub.Visibility = Visibility.Collapsed; } if (_currentSample.HasDocumentation) { var docs = await this._currentSample.GetDocumentationAsync(); if (!string.IsNullOrWhiteSpace(docs)) { DocumentationTextblock.Text = docs; InfoAreaPivot.Items.Add(DocumentationPivotItem); } } if (InfoAreaPivot.Items.Count == 0) { HideInfoArea(); } TitleTextBlock.Text = $"{category.Name} -> {_currentSample?.Name}"; ApplicationView.SetTitle(this, $"{category.Name} - {_currentSample?.Name}"); } await SetHamburgerMenuSelection(); }
protected override async void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); if (e.Parameter is Sample sample) { CurrentSample = sample; } if (CurrentSample != null) { if (!string.IsNullOrWhiteSpace(CurrentSample.Type)) { try { var pageInstance = Activator.CreateInstance(CurrentSample.PageType); SampleContent.Content = pageInstance; } catch { ExceptionNotification.Show("Sample Page failed to load."); } if (SamplePage != null) { SamplePage.Loaded += SamplePage_Loaded; } } else { _onlyDocumentation = true; } DataContext = CurrentSample; await Samples.PushRecentSample(CurrentSample); var propertyDesc = CurrentSample.PropertyDescriptor; InfoAreaPivot.Items.Clear(); if (propertyDesc != null) { _xamlRenderer.DataContext = propertyDesc.Expando; } if (propertyDesc != null && propertyDesc.Options.Count > 0) { InfoAreaPivot.Items.Add(PropertiesPivotItem); } if (CurrentSample.HasXAMLCode) { if (AnalyticsInfo.VersionInfo.GetDeviceFormFactor() != DeviceFormFactor.Desktop || CurrentSample.DisableXamlEditorRendering) { // Only makes sense (and works) for now to show Live Xaml on Desktop, so fallback to old system here otherwise. XamlReadOnlyCodeRenderer.SetCode(CurrentSample.UpdatedXamlCode, "xaml"); InfoAreaPivot.Items.Add(XamlReadOnlyPivotItem); } else { XamlCodeEditor.Text = CurrentSample.UpdatedXamlCode; InfoAreaPivot.Items.Add(XamlPivotItem); _xamlCodeRendererSupported = true; } InfoAreaPivot.SelectedIndex = 0; } if (CurrentSample.HasCSharpCode) { var code = await CurrentSample.GetCSharpSourceAsync(); CSharpCodeRenderer.SetCode(code, "c#"); InfoAreaPivot.Items.Add(CSharpPivotItem); } if (CurrentSample.HasJavaScriptCode) { var code = await CurrentSample.GetJavaScriptSourceAsync(); JavaScriptCodeRenderer.SetCode(code, "js"); InfoAreaPivot.Items.Add(JavaScriptPivotItem); } if (CurrentSample.HasDocumentation) { #pragma warning disable SA1008 // Opening parenthesis must be spaced correctly var(contents, path) = await CurrentSample.GetDocumentationAsync(); #pragma warning restore SA1008 // Opening parenthesis must be spaced correctly documentationPath = path; if (!string.IsNullOrWhiteSpace(contents)) { DocumentationTextblock.Text = contents; InfoAreaPivot.Items.Add(DocumentationPivotItem); } } // Hide the Github button if there isn't a CodeUrl. if (string.IsNullOrEmpty(CurrentSample.CodeUrl)) { GithubButton.Visibility = Visibility.Collapsed; } if (InfoAreaPivot.Items.Count == 0) { SidePaneState = PaneState.None; _hasDocumentation = false; } else { SidePaneState = _onlyDocumentation ? PaneState.Full : PaneState.Normal; } Shell.Current.SetAppTitle($"{CurrentSample.CategoryName} > {CurrentSample.Name}"); } else { ExceptionNotification.Show("Sample does not exist"); } if (!CanChangePaneState) { SampleTitleBar.Children.Remove(NarrowInfoButton); PaneStates.States.Clear(); WindowStates.States.Clear(); } }
protected override async void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); if (e.Parameter is Sample sample) { CurrentSample = sample; } if (CurrentSample != null) { if (!string.IsNullOrWhiteSpace(CurrentSample.Type)) { try { var pageInstance = Activator.CreateInstance(CurrentSample.PageType); SampleContent.Content = pageInstance; // Some samples use the OnNavigatedTo and OnNavigatedFrom // Can't use Frame here because some samples depend on the current Frame MethodInfo method = CurrentSample.PageType.GetMethod( "OnNavigatedTo", BindingFlags.Instance | BindingFlags.NonPublic); if (method != null) { method.Invoke(pageInstance, new object[] { e }); } } catch { ExceptionNotification.Show("Sample Page failed to load."); } if (SamplePage != null) { SamplePage.Loaded += SamplePage_Loaded; } } else { _onlyDocumentation = true; } InfoAreaPivot.Items.Clear(); if (CurrentSample.HasXAMLCode) { // Load Sample Properties before we load sample (if we haven't before) await CurrentSample.PreparePropertyDescriptorAsync(); // We only have properties on examples with live XAML var propertyDesc = CurrentSample.PropertyDescriptor; if (propertyDesc != null) { _xamlRenderer.DataContext = propertyDesc.Expando; } if (propertyDesc?.Options.Count > 0) { InfoAreaPivot.Items.Add(PropertiesPivotItem); } if (AnalyticsInfo.VersionInfo.GetDeviceFormFactor() != DeviceFormFactor.Desktop || CurrentSample.DisableXamlEditorRendering) { // Only makes sense (and works) for now to show Live Xaml on Desktop, so fallback to old system here otherwise. XamlReadOnlyCodeRenderer.SetCode(CurrentSample.UpdatedXamlCode, "xaml"); InfoAreaPivot.Items.Add(XamlReadOnlyPivotItem); } else { XamlCodeEditor.Text = CurrentSample.UpdatedXamlCode; InfoAreaPivot.Items.Add(XamlPivotItem); _xamlCodeRendererSupported = true; } InfoAreaPivot.SelectedIndex = 0; } if (CurrentSample.HasCSharpCode) { var code = await CurrentSample.GetCSharpSourceAsync(); CSharpCodeRenderer.SetCode(code, "c#"); InfoAreaPivot.Items.Add(CSharpPivotItem); } if (CurrentSample.HasDocumentation) { #pragma warning disable SA1008 // Opening parenthesis must be spaced correctly var(contents, path) = await CurrentSample.GetDocumentationAsync(); #pragma warning restore SA1008 // Opening parenthesis must be spaced correctly documentationPath = path; if (!string.IsNullOrWhiteSpace(contents)) { DocumentationTextBlock.Text = contents; InfoAreaPivot.Items.Add(DocumentationPivotItem); } } // Hide the GitHub button if there isn't a CodeUrl. if (string.IsNullOrEmpty(CurrentSample.CodeUrl)) { GithubButton.Visibility = Visibility.Collapsed; } else { GithubButton.Visibility = Visibility.Visible; } DataContext = CurrentSample; if (InfoAreaPivot.Items.Count == 0) { SidePaneState = PaneState.None; } else { SidePaneState = _onlyDocumentation ? PaneState.Full : PaneState.Normal; } Shell.Current.SetAppTitle($"{CurrentSample.CategoryName} > {CurrentSample.Name}"); } else { ExceptionNotification.Show("Sample does not exist"); } if (!CanChangePaneState) { SampleTitleBar.Children.Remove(NarrowInfoButton); } if (e.NavigationMode != NavigationMode.Back) { var nop = Samples.PushRecentSample(CurrentSample); } }