HorizontalAlignmentPropertyEditor.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using System.Windows.Controls.Primitives;
  5. using System.Windows.Data;
  6. using System.Windows.Media;
  7. using System.Windows.Shapes;
  8. using HandyControl.Data;
  9. using HandyControl.Tools;
  10. namespace HandyControl.Controls;
  11. public class HorizontalAlignmentPropertyEditor : PropertyEditorBase
  12. {
  13. public override FrameworkElement CreateElement(PropertyItem propertyItem) => new System.Windows.Controls.ComboBox
  14. {
  15. Style = ResourceHelper.GetResourceInternal<Style>("ComboBoxCapsule"),
  16. ItemsSource = Enum.GetValues(propertyItem.PropertyType),
  17. ItemTemplateSelector = ResourceHelper.GetResourceInternal<DataTemplateSelector>("HorizontalAlignmentPathTemplateSelector"),
  18. HorizontalAlignment = HorizontalAlignment.Left
  19. };
  20. public override DependencyProperty GetDependencyProperty() => Selector.SelectedValueProperty;
  21. }
  22. public class HorizontalAlignmentPathTemplateSelector : DataTemplateSelector
  23. {
  24. public override DataTemplate SelectTemplate(object item, DependencyObject container)
  25. {
  26. if (item is HorizontalAlignment horizontalAlignment)
  27. {
  28. var dataTemplate = new DataTemplate
  29. {
  30. DataType = typeof(System.Windows.Controls.ComboBox)
  31. };
  32. var factory = new FrameworkElementFactory(typeof(Path));
  33. factory.SetValue(FrameworkElement.WidthProperty, 12.0);
  34. factory.SetValue(FrameworkElement.HeightProperty, ValueBoxes.Double10Box);
  35. factory.SetBinding(Shape.FillProperty, new Binding(Control.ForegroundProperty.Name)
  36. {
  37. RelativeSource = new RelativeSource
  38. {
  39. AncestorType = typeof(ComboBoxItem)
  40. }
  41. });
  42. switch (horizontalAlignment)
  43. {
  44. case HorizontalAlignment.Left:
  45. factory.SetValue(Path.DataProperty, ResourceHelper.GetResourceInternal<Geometry>("AlignLeftGeometry"));
  46. break;
  47. case HorizontalAlignment.Center:
  48. factory.SetValue(Path.DataProperty, ResourceHelper.GetResourceInternal<Geometry>("AlignHCenterGeometry"));
  49. break;
  50. case HorizontalAlignment.Right:
  51. factory.SetValue(Path.DataProperty, ResourceHelper.GetResourceInternal<Geometry>("AlignRightGeometry"));
  52. break;
  53. case HorizontalAlignment.Stretch:
  54. factory.SetValue(Path.DataProperty, ResourceHelper.GetResourceInternal<Geometry>("AlignHStretchGeometry"));
  55. break;
  56. }
  57. dataTemplate.VisualTree = factory;
  58. return dataTemplate;
  59. }
  60. return null;
  61. }
  62. }