TabItemCapsuleStyleSelector.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334
  1. using System.Windows;
  2. using System.Windows.Controls;
  3. using HandyControl.Data;
  4. namespace HandyControl.Tools;
  5. public class TabItemCapsuleStyleSelector : StyleSelector
  6. {
  7. public override Style SelectStyle(object item, DependencyObject container)
  8. {
  9. if (container is TabItem tabItem && VisualHelper.GetParent<TabControl>(tabItem) is { } tabControl)
  10. {
  11. var count = tabControl.Items.Count;
  12. if (count == 1)
  13. {
  14. return ResourceHelper.GetResourceInternal<Style>(ResourceToken.TabItemCapsuleSingle);
  15. }
  16. var index = tabControl.ItemContainerGenerator.IndexFromContainer(tabItem);
  17. return index == 0
  18. ? ResourceHelper.GetResourceInternal<Style>(
  19. tabControl.TabStripPlacement == Dock.Top || tabControl.TabStripPlacement == Dock.Bottom
  20. ? ResourceToken.TabItemCapsuleHorizontalFirst
  21. : ResourceToken.TabItemCapsuleVerticalFirst)
  22. : ResourceHelper.GetResourceInternal<Style>(index == count - 1
  23. ? tabControl.TabStripPlacement == Dock.Top || tabControl.TabStripPlacement == Dock.Bottom
  24. ? ResourceToken.TabItemCapsuleHorizontalLast
  25. : ResourceToken.TabItemCapsuleVerticalLast
  26. : ResourceToken.TabItemCapsuleDefault);
  27. }
  28. return null;
  29. }
  30. }