| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- using System;
- using System.Reflection;
- using System.Windows;
- using TeamAAS.Camera.Attributes;
- using TeamAAS.Camera.Interfaces;
- namespace TeamAAS.Camera.UI
- {
- /// <summary>
- /// 调试页工厂:按相机类型上的 [Camera] 特性选择调试页类型,
- /// 未指定 DebugPageType 时回退到默认调试页(DefaultCameraDebugPage)。
- /// 创建成功后自动把相机实例绑定给实现了 ICameraDebugPage 的页面。
- /// </summary>
- public static class CameraDebugPageFactory
- {
- public static FrameworkElement Create(ICamera camera)
- {
- Type pageType = typeof(DefaultCameraDebugPage);
- if (camera != null)
- {
- var attr = camera.GetType().GetCustomAttribute<CameraAttribute>(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;
- }
- }
- }
|