HeaderedContentControl.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using Avalonia.Controls.Mixins;
  4. using Avalonia.Controls.Presenters;
  5. using Avalonia.Controls.Templates;
  6. namespace Avalonia.Controls.Primitives
  7. {
  8. /// <summary>
  9. /// A <see cref="ContentControl"/> with a header.
  10. /// </summary>
  11. public class HeaderedContentControl : ContentControl, IHeadered
  12. {
  13. /// <summary>
  14. /// Defines the <see cref="Header"/> property.
  15. /// </summary>
  16. public static readonly StyledProperty<object> HeaderProperty =
  17. AvaloniaProperty.Register<HeaderedContentControl, object>(nameof(Header));
  18. /// <summary>
  19. /// Defines the <see cref="HeaderTemplate"/> property.
  20. /// </summary>
  21. public static readonly StyledProperty<IDataTemplate> HeaderTemplateProperty =
  22. AvaloniaProperty.Register<HeaderedContentControl, IDataTemplate>(nameof(HeaderTemplate));
  23. /// <summary>
  24. /// Initializes static members of the <see cref="ContentControl"/> class.
  25. /// </summary>
  26. static HeaderedContentControl()
  27. {
  28. ContentControlMixin.Attach<HeaderedContentControl>(
  29. HeaderProperty,
  30. x => x.LogicalChildren,
  31. "PART_HeaderPresenter");
  32. }
  33. /// <summary>
  34. /// Gets or sets the header content.
  35. /// </summary>
  36. public object Header
  37. {
  38. get { return GetValue(HeaderProperty); }
  39. set { SetValue(HeaderProperty, value); }
  40. }
  41. /// <summary>
  42. /// Gets the header presenter from the control's template.
  43. /// </summary>
  44. public IContentPresenter HeaderPresenter
  45. {
  46. get;
  47. private set;
  48. }
  49. /// <summary>
  50. /// Gets or sets the data template used to display the header content of the control.
  51. /// </summary>
  52. public IDataTemplate HeaderTemplate
  53. {
  54. get { return GetValue(HeaderTemplateProperty); }
  55. set { SetValue(HeaderTemplateProperty, value); }
  56. }
  57. /// <inheritdoc/>
  58. protected override void RegisterContentPresenter(IContentPresenter presenter)
  59. {
  60. base.RegisterContentPresenter(presenter);
  61. if (presenter.Name == "PART_HeaderPresenter")
  62. {
  63. HeaderPresenter = presenter;
  64. }
  65. }
  66. }
  67. }