Legend.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. // --------------------------------------------------------------------------------------------------------------------
  2. // <copyright file="Legend.cs" company="OxyPlot">
  3. // Copyright (c) 2014 OxyPlot contributors
  4. // </copyright>
  5. // <summary>
  6. // Represents a control that displays a <see cref="OxyPlot.Legends.Legend" />.
  7. // </summary>
  8. // --------------------------------------------------------------------------------------------------------------------
  9. using Avalonia;
  10. namespace OxyPlot.Avalonia
  11. {
  12. using global::Avalonia.Controls;
  13. /// <summary>
  14. /// Represents a control that displays a <see cref="Legends.Legend" />.
  15. /// </summary>
  16. public partial class Legend : Control
  17. {
  18. /// <summary>
  19. /// The internal model.
  20. /// </summary>
  21. private readonly Legends.Legend InternalLegend;
  22. /// <summary>
  23. /// Initializes static members of the <see cref="Legend" /> class.
  24. /// </summary>
  25. public Legend()
  26. {
  27. this.InternalLegend = new Legends.Legend();
  28. }
  29. /// <summary>
  30. /// Synchronize properties in the internal Plot model
  31. /// </summary>
  32. private void SynchronizeProperties()
  33. {
  34. var m = this.InternalLegend;
  35. m.LegendTextColor = this.LegendTextColor.ToOxyColor();
  36. m.LegendTitle = this.LegendTitle;
  37. m.LegendTitleColor = this.LegendTitleColor.ToOxyColor();
  38. m.LegendTitleFont = this.LegendTitleFont;
  39. m.LegendTitleFontSize = this.LegendTitleFontSize;
  40. m.LegendTitleFontWeight = (int)this.LegendTitleFontWeight;
  41. m.LegendFont = this.LegendFont;
  42. m.LegendFontSize = this.LegendFontSize;
  43. m.LegendFontWeight = (int)this.LegendFontWeight;
  44. m.LegendSymbolLength = this.LegendSymbolLength;
  45. m.LegendSymbolMargin = this.LegendSymbolMargin;
  46. m.LegendPadding = this.LegendPadding;
  47. m.LegendColumnSpacing = this.LegendColumnSpacing;
  48. m.LegendItemSpacing = this.LegendItemSpacing;
  49. m.LegendLineSpacing = this.LegendLineSpacing;
  50. m.LegendMargin = this.LegendMargin;
  51. m.LegendMaxHeight = this.LegendMaxHeight;
  52. m.LegendMaxWidth = this.LegendMaxWidth;
  53. m.LegendBackground = this.LegendBackground.ToOxyColor();
  54. m.LegendBorder = this.LegendBorder.ToOxyColor();
  55. m.LegendBorderThickness = this.LegendBorderThickness;
  56. m.LegendPlacement = this.LegendPlacement;
  57. m.LegendPosition = this.LegendPosition;
  58. m.LegendOrientation = this.LegendOrientation;
  59. m.LegendItemOrder = this.LegendItemOrder;
  60. m.LegendItemAlignment = this.LegendItemAlignment.ToHorizontalAlignment();
  61. m.LegendSymbolPlacement = this.LegendSymbolPlacement;
  62. m.IsLegendVisible = this.IsLegendVisible;
  63. m.EdgeRenderingMode = this.EdgeRenderingMode;
  64. }
  65. /// <summary>
  66. /// Handles changes in appearance.
  67. /// </summary>
  68. /// <param name="d">The sender.</param>
  69. /// <param name="e">The <see cref="DependencyPropertyChangedEventArgs" /> instance containing the event data.</param>
  70. protected static void AppearanceChanged(AvaloniaObject d, AvaloniaPropertyChangedEventArgs e)
  71. {
  72. ((Legend)d).OnVisualChanged();
  73. }
  74. /// <summary>
  75. /// The on visual changed handler.
  76. /// </summary>
  77. protected void OnVisualChanged()
  78. {
  79. (this.Parent as IPlot)?.ElementAppearanceChanged(this);
  80. }
  81. /// <summary>
  82. /// Handles changes in data.
  83. /// </summary>
  84. /// <param name="d">The sender.</param>
  85. /// <param name="e">The <see cref="DependencyPropertyChangedEventArgs" /> instance containing the event data.</param>
  86. protected static void DataChanged(AvaloniaObject d, AvaloniaPropertyChangedEventArgs e)
  87. {
  88. ((Legend)d).OnDataChanged();
  89. }
  90. /// <summary>
  91. /// The on data changed handler.
  92. /// </summary>
  93. protected void OnDataChanged()
  94. {
  95. (this.Parent as IPlot)?.ElementDataChanged(this);
  96. }
  97. static Legend()
  98. {
  99. IsLegendVisibleProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  100. LegendTextColorProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  101. LegendTitleProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  102. LegendTitleColorProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  103. LegendTitleFontProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  104. LegendTitleFontSizeProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  105. LegendTitleFontWeightProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  106. LegendFontProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  107. LegendFontSizeProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  108. LegendFontWeightProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  109. LegendSymbolLengthProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  110. LegendSymbolMarginProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  111. LegendPaddingProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  112. LegendColumnSpacingProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  113. LegendItemSpacingProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  114. LegendLineSpacingProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  115. LegendMarginProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  116. LegendMaxHeightProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  117. LegendMaxWidthProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  118. LegendBackgroundProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  119. LegendBorderProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  120. LegendBorderThicknessProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  121. LegendPlacementProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  122. LegendPositionProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  123. LegendOrientationProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  124. LegendItemOrderProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  125. LegendItemAlignmentProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  126. LegendSymbolPlacementProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  127. IsLegendVisibleProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  128. EdgeRenderingModeProperty.Changed.AddClassHandler<Legend>(AppearanceChanged);
  129. }
  130. /// <summary>
  131. /// Creates the internal legend.
  132. /// </summary>
  133. /// <returns>The internal legend.</returns>
  134. public Legends.Legend CreateModel()
  135. {
  136. this.SynchronizeProperties();
  137. return this.InternalLegend;
  138. }
  139. }
  140. }