// Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. using Avalonia.Controls.Mixins; using Avalonia.Controls.Presenters; using Avalonia.Controls.Templates; namespace Avalonia.Controls.Primitives { /// /// A with a header. /// public class HeaderedContentControl : ContentControl, IHeadered { /// /// Defines the property. /// public static readonly StyledProperty HeaderProperty = AvaloniaProperty.Register(nameof(Header)); /// /// Defines the property. /// public static readonly StyledProperty HeaderTemplateProperty = AvaloniaProperty.Register(nameof(HeaderTemplate)); /// /// Initializes static members of the class. /// static HeaderedContentControl() { ContentControlMixin.Attach( HeaderProperty, x => x.LogicalChildren, "PART_HeaderPresenter"); } /// /// Gets or sets the header content. /// public object Header { get { return GetValue(HeaderProperty); } set { SetValue(HeaderProperty, value); } } /// /// Gets the header presenter from the control's template. /// public IContentPresenter HeaderPresenter { get; private set; } /// /// Gets or sets the data template used to display the header content of the control. /// public IDataTemplate HeaderTemplate { get { return GetValue(HeaderTemplateProperty); } set { SetValue(HeaderTemplateProperty, value); } } /// protected override void RegisterContentPresenter(IContentPresenter presenter) { base.RegisterContentPresenter(presenter); if (presenter.Name == "PART_HeaderPresenter") { HeaderPresenter = presenter; } } } }