Browse Source

Merge branch 'master' into fixes/enumerate-child-windows-before-closing

pull/5616/head
Dariusz Komosiński 6 years ago
committed by GitHub
parent
commit
cbb524424c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 67
      src/Avalonia.Controls/Control.cs
  2. 14
      src/Avalonia.Visuals/Visual.cs

67
src/Avalonia.Controls/Control.cs

@ -8,6 +8,8 @@ using Avalonia.Rendering;
using Avalonia.Styling; using Avalonia.Styling;
using Avalonia.VisualTree; using Avalonia.VisualTree;
#nullable enable
namespace Avalonia.Controls namespace Avalonia.Controls
{ {
/// <summary> /// <summary>
@ -23,20 +25,20 @@ namespace Avalonia.Controls
/// <summary> /// <summary>
/// Defines the <see cref="FocusAdorner"/> property. /// Defines the <see cref="FocusAdorner"/> property.
/// </summary> /// </summary>
public static readonly StyledProperty<ITemplate<IControl>> FocusAdornerProperty = public static readonly StyledProperty<ITemplate<IControl>?> FocusAdornerProperty =
AvaloniaProperty.Register<Control, ITemplate<IControl>>(nameof(FocusAdorner)); AvaloniaProperty.Register<Control, ITemplate<IControl>?>(nameof(FocusAdorner));
/// <summary> /// <summary>
/// Defines the <see cref="Tag"/> property. /// Defines the <see cref="Tag"/> property.
/// </summary> /// </summary>
public static readonly StyledProperty<object> TagProperty = public static readonly StyledProperty<object?> TagProperty =
AvaloniaProperty.Register<Control, object>(nameof(Tag)); AvaloniaProperty.Register<Control, object?>(nameof(Tag));
/// <summary> /// <summary>
/// Defines the <see cref="ContextMenu"/> property. /// Defines the <see cref="ContextMenu"/> property.
/// </summary> /// </summary>
public static readonly StyledProperty<ContextMenu> ContextMenuProperty = public static readonly StyledProperty<ContextMenu?> ContextMenuProperty =
AvaloniaProperty.Register<Control, ContextMenu>(nameof(ContextMenu)); AvaloniaProperty.Register<Control, ContextMenu?>(nameof(ContextMenu));
/// <summary> /// <summary>
/// Event raised when an element wishes to be scrolled into view. /// Event raised when an element wishes to be scrolled into view.
@ -44,16 +46,16 @@ namespace Avalonia.Controls
public static readonly RoutedEvent<RequestBringIntoViewEventArgs> RequestBringIntoViewEvent = public static readonly RoutedEvent<RequestBringIntoViewEventArgs> RequestBringIntoViewEvent =
RoutedEvent.Register<Control, RequestBringIntoViewEventArgs>("RequestBringIntoView", RoutingStrategies.Bubble); RoutedEvent.Register<Control, RequestBringIntoViewEventArgs>("RequestBringIntoView", RoutingStrategies.Bubble);
private DataTemplates _dataTemplates; private DataTemplates? _dataTemplates;
private IControl _focusAdorner; private IControl? _focusAdorner;
/// <summary> /// <summary>
/// Gets or sets the control's focus adorner. /// Gets or sets the control's focus adorner.
/// </summary> /// </summary>
public ITemplate<IControl> FocusAdorner public ITemplate<IControl>? FocusAdorner
{ {
get { return GetValue(FocusAdornerProperty); } get => GetValue(FocusAdornerProperty);
set { SetValue(FocusAdornerProperty, value); } set => SetValue(FocusAdornerProperty, value);
} }
/// <summary> /// <summary>
@ -63,27 +65,27 @@ namespace Avalonia.Controls
/// Each control may define data templates which are applied to the control itself and its /// Each control may define data templates which are applied to the control itself and its
/// children. /// children.
/// </remarks> /// </remarks>
public DataTemplates DataTemplates => _dataTemplates ?? (_dataTemplates = new DataTemplates()); public DataTemplates DataTemplates => _dataTemplates ??= new DataTemplates();
/// <summary> /// <summary>
/// Gets or sets a context menu to the control. /// Gets or sets a context menu to the control.
/// </summary> /// </summary>
public ContextMenu ContextMenu public ContextMenu? ContextMenu
{ {
get { return GetValue(ContextMenuProperty); } get => GetValue(ContextMenuProperty);
set { SetValue(ContextMenuProperty, value); } set => SetValue(ContextMenuProperty, value);
} }
/// <summary> /// <summary>
/// Gets or sets a user-defined object attached to the control. /// Gets or sets a user-defined object attached to the control.
/// </summary> /// </summary>
public object Tag public object? Tag
{ {
get { return GetValue(TagProperty); } get => GetValue(TagProperty);
set { SetValue(TagProperty, value); } set => SetValue(TagProperty, value);
} }
public new IControl Parent => (IControl)base.Parent; public new IControl? Parent => (IControl?)base.Parent;
/// <inheritdoc/> /// <inheritdoc/>
bool IDataTemplateHost.IsDataTemplatesInitialized => _dataTemplates != null; bool IDataTemplateHost.IsDataTemplatesInitialized => _dataTemplates != null;
@ -106,15 +108,10 @@ namespace Avalonia.Controls
{ {
var c = i as IControl; var c = i as IControl;
if (c?.IsInitialized == false) if (c?.IsInitialized == false && c is ISupportInitialize init)
{ {
var init = c as ISupportInitialize; init.BeginInit();
init.EndInit();
if (init != null)
{
init.BeginInit();
init.EndInit();
}
} }
} }
} }
@ -131,10 +128,7 @@ namespace Avalonia.Controls
/// Gets the element that receives the focus adorner. /// Gets the element that receives the focus adorner.
/// </summary> /// </summary>
/// <returns>The control that receives the focus adorner.</returns> /// <returns>The control that receives the focus adorner.</returns>
protected virtual IControl GetTemplateFocusTarget() protected virtual IControl? GetTemplateFocusTarget() => this;
{
return this;
}
/// <inheritdoc/> /// <inheritdoc/>
protected sealed override void OnAttachedToVisualTreeCore(VisualTreeAttachmentEventArgs e) protected sealed override void OnAttachedToVisualTreeCore(VisualTreeAttachmentEventArgs e)
@ -173,15 +167,10 @@ namespace Avalonia.Controls
} }
} }
if (_focusAdorner != null) if (_focusAdorner != null && GetTemplateFocusTarget() is Visual target)
{ {
var target = (Visual)GetTemplateFocusTarget(); AdornerLayer.SetAdornedElement((Visual)_focusAdorner, target);
adornerLayer.Children.Add(_focusAdorner);
if (target != null)
{
AdornerLayer.SetAdornedElement((Visual)_focusAdorner, target);
adornerLayer.Children.Add(_focusAdorner);
}
} }
} }
} }

14
src/Avalonia.Visuals/Visual.cs

@ -150,7 +150,7 @@ namespace Avalonia
public TransformedBounds? TransformedBounds => _transformedBounds; public TransformedBounds? TransformedBounds => _transformedBounds;
/// <summary> /// <summary>
/// Gets a value indicating whether the control should be clipped to its bounds. /// Gets or sets a value indicating whether the control should be clipped to its bounds.
/// </summary> /// </summary>
public bool ClipToBounds public bool ClipToBounds
{ {
@ -191,7 +191,7 @@ namespace Avalonia
} }
/// <summary> /// <summary>
/// Gets a value indicating whether this control is visible. /// Gets or sets a value indicating whether this control is visible.
/// </summary> /// </summary>
public bool IsVisible public bool IsVisible
{ {
@ -200,7 +200,7 @@ namespace Avalonia
} }
/// <summary> /// <summary>
/// Gets the opacity of the control. /// Gets or sets the opacity of the control.
/// </summary> /// </summary>
public double Opacity public double Opacity
{ {
@ -209,7 +209,7 @@ namespace Avalonia
} }
/// <summary> /// <summary>
/// Gets the opacity mask of the control. /// Gets or sets the opacity mask of the control.
/// </summary> /// </summary>
public IBrush OpacityMask public IBrush OpacityMask
{ {
@ -218,7 +218,7 @@ namespace Avalonia
} }
/// <summary> /// <summary>
/// Gets the render transform of the control. /// Gets or sets the render transform of the control.
/// </summary> /// </summary>
public ITransform RenderTransform public ITransform RenderTransform
{ {
@ -227,7 +227,7 @@ namespace Avalonia
} }
/// <summary> /// <summary>
/// Gets the transform origin of the control. /// Gets or sets the transform origin of the control.
/// </summary> /// </summary>
public RelativePoint RenderTransformOrigin public RelativePoint RenderTransformOrigin
{ {
@ -236,7 +236,7 @@ namespace Avalonia
} }
/// <summary> /// <summary>
/// Gets the Z index of the control. /// Gets or sets the Z index of the control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Controls with a higher <see cref="ZIndex"/> will appear in front of controls with /// Controls with a higher <see cref="ZIndex"/> will appear in front of controls with

Loading…
Cancel
Save