namespace NeumUI.Assists; /// /// TabAssist 类用于在 WPF 应用程序中为 TabControl 提供附加功能。通过依赖属性 UseFadeIn,可以控制选项卡切换时是否启用渐变浮现效果。 /// 该类扩展了 DependencyObject,因此能够支持数据绑定和样式设置。 /// public class TabAssist { /// /// 获取指定依赖对象是否启用渐变浮现效果。 /// /// 要获取渐变浮现效果设置的依赖对象。 /// 如果依赖对象启用了渐变浮现效果,则返回 true;否则返回 false。 public static bool GetUseFadeIn(DependencyObject obj) { return (bool)obj.GetValue(UseFadeInProperty); } /// /// 设置指定依赖对象是否启用渐变浮现效果。 /// /// 要设置 UseFadeIn 属性的 DependencyObject。 /// 如果为 true,则启用渐变浮现效果;否则,禁用该效果。 public static void SetUseFadeIn(DependencyObject obj, bool value) { obj.SetValue(UseFadeInProperty, value); } /// /// UseFadeInProperty 是一个依赖属性,用于控制 TabControl 在选项卡切换时是否启用渐变浮现效果。通过设置此属性为 true 或 false,可以开启或关闭该视觉效果。 /// public static readonly DependencyProperty UseFadeInProperty = DependencyProperty.RegisterAttached("UseFadeIn", typeof(bool), typeof(TabAssist), new PropertyMetadata(false, OnUseFadeInChanged)); //切换选项卡时使用渐变浮现效果 private static void OnUseFadeInChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var tabControl = (TabControl)d; if (!(bool)e.OldValue && (bool)e.NewValue) { tabControl.SelectionChanged += TabControl_FadeInEffect; } if ((bool)e.OldValue && !(bool)e.NewValue) { tabControl.SelectionChanged -= TabControl_FadeInEffect; } } private static void TabControl_FadeInEffect(object sender, SelectionChangedEventArgs e) { var tabControl = (TabControl)sender; //判断是子控件消息还是Tab消息 if (e.Source.GetType() == typeof(TabControl)) return; e.Handled = true; //继续向父级传递 if (tabControl.Parent is not UIElement tabParent) return; var selectionEventArg = new SelectionChangedEventArgs(e.RoutedEvent, e.RemovedItems, e.AddedItems) { Source = e.OriginalSource }; tabParent.RaiseEvent(selectionEventArg); } // 注册 TabType 附加属性 public static readonly DependencyProperty TabTypeProperty = DependencyProperty.RegisterAttached( "TabType", typeof(TabType), typeof(TabAssist), new PropertyMetadata(TabType.Line)); // 默认值为 Line public static void SetTabType(DependencyObject element, TabType value) { element.SetValue(TabTypeProperty, value); } public static TabType GetTabType(DependencyObject element) { return (TabType)element.GetValue(TabTypeProperty); } // 注册 IsEditable 附加属性 public static readonly DependencyProperty IsEditableProperty = DependencyProperty.RegisterAttached( "IsEditable", typeof(bool), typeof(TabAssist), new PropertyMetadata(false)); public static void SetIsEditable(DependencyObject element, bool value) { element.SetValue(IsEditableProperty, value); } public static bool GetIsEditable(DependencyObject element) { return (bool)element.GetValue(IsEditableProperty); } } public enum TabType { Line, // 默认线条样式 Card // 卡片样式 }