CameraDebugPageFactory.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using System.Reflection;
  3. using System.Windows;
  4. using TeamAAS.Camera.Attributes;
  5. using TeamAAS.Camera.Interfaces;
  6. namespace TeamAAS.Camera.UI
  7. {
  8. /// <summary>
  9. /// 调试页工厂:按相机类型上的 [Camera] 特性选择调试页类型,
  10. /// 未指定 DebugPageType 时回退到默认调试页(DefaultCameraDebugPage)。
  11. /// 创建成功后自动把相机实例绑定给实现了 ICameraDebugPage 的页面。
  12. /// </summary>
  13. public static class CameraDebugPageFactory
  14. {
  15. public static FrameworkElement Create(ICamera camera)
  16. {
  17. Type pageType = typeof(DefaultCameraDebugPage);
  18. if (camera != null)
  19. {
  20. var attr = camera.GetType().GetCustomAttribute<CameraAttribute>(inherit: false);
  21. if (attr?.DebugPageType != null &&
  22. typeof(FrameworkElement).IsAssignableFrom(attr.DebugPageType))
  23. {
  24. pageType = attr.DebugPageType;
  25. }
  26. }
  27. FrameworkElement page = null;
  28. try
  29. {
  30. page = Activator.CreateInstance(pageType) as FrameworkElement;
  31. }
  32. catch (Exception ex)
  33. {
  34. // 自定义页构造失败不应拖垮设置页,退回默认页
  35. System.Diagnostics.Debug.WriteLine($"创建调试页 {pageType.Name} 失败: {ex.Message}");
  36. }
  37. if (page == null)
  38. page = new DefaultCameraDebugPage();
  39. if (camera != null && page is ICameraDebugPage bindable)
  40. bindable.BindCamera(camera);
  41. return page;
  42. }
  43. }
  44. }