using System; using System.Reflection; using System.Windows; using TeamAAS.Camera.Attributes; using TeamAAS.Camera.Interfaces; namespace TeamAAS.Camera.UI { /// /// 调试页工厂:按相机类型上的 [Camera] 特性选择调试页类型, /// 未指定 DebugPageType 时回退到默认调试页(DefaultCameraDebugPage)。 /// 创建成功后自动把相机实例绑定给实现了 ICameraDebugPage 的页面。 /// public static class CameraDebugPageFactory { public static FrameworkElement Create(ICamera camera) { Type pageType = typeof(DefaultCameraDebugPage); if (camera != null) { var attr = camera.GetType().GetCustomAttribute(inherit: false); if (attr?.DebugPageType != null && typeof(FrameworkElement).IsAssignableFrom(attr.DebugPageType)) { pageType = attr.DebugPageType; } } FrameworkElement page = null; try { page = Activator.CreateInstance(pageType) as FrameworkElement; } catch (Exception ex) { // 自定义页构造失败不应拖垮设置页,退回默认页 System.Diagnostics.Debug.WriteLine($"创建调试页 {pageType.Name} 失败: {ex.Message}"); } if (page == null) page = new DefaultCameraDebugPage(); if (camera != null && page is ICameraDebugPage bindable) bindable.BindCamera(camera); return page; } } }