MainWindow.xaml.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. using System.Linq.Expressions;
  3. using Avalonia;
  4. using Avalonia.Controls;
  5. using Avalonia.Markup.Xaml;
  6. using Avalonia.Rendering;
  7. using RenderDemo.ViewModels;
  8. using MiniMvvm;
  9. namespace RenderDemo
  10. {
  11. public class MainWindow : Window
  12. {
  13. public MainWindow()
  14. {
  15. InitializeComponent();
  16. this.AttachDevTools();
  17. var vm = new MainWindowViewModel();
  18. void BindOverlay(Expression<Func<MainWindowViewModel, bool>> expr, RendererDebugOverlays overlay)
  19. => vm.WhenAnyValue(expr).Subscribe(x =>
  20. {
  21. var diagnostics = RendererDiagnostics;
  22. diagnostics.DebugOverlays = x ?
  23. diagnostics.DebugOverlays | overlay :
  24. diagnostics.DebugOverlays & ~overlay;
  25. });
  26. BindOverlay(x => x.DrawDirtyRects, RendererDebugOverlays.DirtyRects);
  27. BindOverlay(x => x.DrawFps, RendererDebugOverlays.Fps);
  28. BindOverlay(x => x.DrawLayoutTimeGraph, RendererDebugOverlays.LayoutTimeGraph);
  29. BindOverlay(x => x.DrawRenderTimeGraph, RendererDebugOverlays.RenderTimeGraph);
  30. DataContext = vm;
  31. }
  32. private void InitializeComponent()
  33. {
  34. AvaloniaXamlLoader.Load(this);
  35. }
  36. }
  37. }