public void ShowExceptionNotification(Exception ex) { if (ex != null) { ExceptionNotification.Show(ex.Message); } }
public void ShowExceptionNotification(Exception ex) { Console.WriteLine(ex.ToString()); if (ex != null) { ExceptionNotification.Show(ex.Message); } }
public void RegisterNewCommand(string name, RoutedEventHandler action) { Commands.Add(new SampleCommand(name, () => { try { action.Invoke(this, new RoutedEventArgs()); } catch (Exception ex) { ExceptionNotification.Show(ex.Message, 3000); } })); }
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); } }
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(); } }
private async Task UpdateXamlRenderAsync(string text) { // Hide any Previous Errors XamlCodeRenderer.Decorations.Clear(); XamlCodeRenderer.Options.GlyphMargin = false; // Try and Render Xaml to a UIElement UIElement element = null; try { element = _xamlRenderer.Render(text); } catch (Exception ex) { ExceptionNotification.Show(ex.Message, 3000); } if (element != null) { // Add element to main panel var content = NavigationFrame.Content as Page; var root = content.FindDescendantByName("XamlRoot"); if (root is Panel) { // If we've defined a 'XamlRoot' element to host us as a panel, use that. (root as Panel).Children.Clear(); (root as Panel).Children.Add(element); } else { // Otherwise, just replace the entire page's content content.Content = element; } // Tell the page we've finished with an update to the XAML contents, after the control has rendered. await Dispatcher.RunAsync(CoreDispatcherPriority.Low, () => { (content as IXamlRenderListener)?.OnXamlRendered(element as FrameworkElement); }); } else if (_xamlRenderer.Errors.Count > 0) { var error = _xamlRenderer.Errors.First(); XamlCodeRenderer.Options.GlyphMargin = true; var range = new Range(error.StartLine, 1, error.EndLine, await XamlCodeRenderer.GetModel().GetLineMaxColumnAsync(error.EndLine)); // Highlight Error Line XamlCodeRenderer.Decorations.Add(new IModelDeltaDecoration( range, new IModelDecorationOptions() { IsWholeLine = true, ClassName = _errorStyle, HoverMessage = new string[] { error.Message } })); // Show Glyph Icon XamlCodeRenderer.Decorations.Add(new IModelDeltaDecoration( range, new IModelDecorationOptions() { IsWholeLine = true, GlyphMarginClassName = _errorIconStyle, GlyphMarginHoverMessage = new string[] { error.Message } })); } }
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); } }