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