using System; using System.Reflection; using System.Windows; using TeamAAS.Feeder.Attributes; using TeamAAS.Feeder.Interfaces; namespace TeamAAS.Feeder.UI { /// /// 供料器调试页工厂:按供料器类型上的 [Feeder] 特性选择品牌专属调试页; /// 未声明 DebugPageType 时回退到库内通用页 (永不返回 null)。 /// 创建成功后自动把供料器实例绑定给实现了 的页面。 /// 与 Camera/Communication 等硬件库一致:宿主 SettingView 只用单个 ContentControl 承载, /// 未选设备时绑定为 null 自然空白,选中设备即切到对应类型的页面。 /// public static class FeederDebugPageFactory { public static FrameworkElement Create(IFeeder feeder) { Type pageType = typeof(DefaultFeederDebugPage); if (feeder != null) { var attr = feeder.GetType().GetCustomAttribute(inherit: false); if (attr != null && 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 DefaultFeederDebugPage(); if (feeder != null && page is IFeederDebugPage) ((IFeederDebugPage)page).BindFeeder(feeder); return page; } } }