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;
}
}
}