ComboBoxItemCapsuleStyleSelector.cs 1.1 KB

1234567891011121314151617181920212223242526272829
  1. using System.Windows;
  2. using System.Windows.Controls;
  3. using HandyControl.Data;
  4. namespace HandyControl.Tools;
  5. public class ComboBoxItemCapsuleStyleSelector : StyleSelector
  6. {
  7. public override Style SelectStyle(object item, DependencyObject container)
  8. {
  9. if (container is ComboBoxItem comboBoxItem && VisualHelper.GetParent<ComboBox>(comboBoxItem) is { } comboBox)
  10. {
  11. var count = comboBox.Items.Count;
  12. if (count == 1)
  13. {
  14. return ResourceHelper.GetResourceInternal<Style>(ResourceToken.ComboBoxItemCapsuleSingle);
  15. }
  16. var index = comboBox.ItemContainerGenerator.IndexFromContainer(comboBoxItem);
  17. return index == 0
  18. ? ResourceHelper.GetResourceInternal<Style>(ResourceToken.ComboBoxItemCapsuleHorizontalFirst)
  19. : ResourceHelper.GetResourceInternal<Style>(index == count - 1
  20. ? ResourceToken.ComboBoxItemCapsuleHorizontalLast
  21. : ResourceToken.ComboBoxItemCapsuleDefault);
  22. }
  23. return null;
  24. }
  25. }