Browse Source

Removed ITemplatedControl.

pull/9553/head
Steven Kirk 4 years ago
parent
commit
6f03f1c3d6
  1. 8
      src/Avalonia.Base/StyledElement.cs
  2. 2
      src/Avalonia.Base/Styling/IStyleable.cs
  3. 9
      src/Avalonia.Base/Styling/ITemplatedControl.cs
  4. 2
      src/Avalonia.Controls/Presenters/IContentPresenterHost.cs
  5. 2
      src/Avalonia.Controls/Presenters/IItemsPresenterHost.cs
  6. 2
      src/Avalonia.Controls/Presenters/ItemsPresenterBase.cs
  7. 4
      src/Avalonia.Controls/Primitives/TemplatedControl.cs
  8. 6
      src/Avalonia.Controls/Templates/FuncControlTemplate.cs
  9. 3
      src/Avalonia.Controls/Templates/FuncControlTemplate`2.cs
  10. 2
      src/Avalonia.Controls/Templates/IControlTemplate.cs
  11. 7
      src/Avalonia.Controls/Templates/TemplateExtensions.cs
  12. 5
      src/Markup/Avalonia.Markup.Xaml/Templates/ControlTemplate.cs
  13. 2
      tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Class.cs
  14. 2
      tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Name.cs
  15. 2
      tests/Avalonia.Base.UnitTests/Styling/SelectorTests_OfType.cs
  16. 2
      tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Template.cs
  17. 8
      tests/Avalonia.Base.UnitTests/Styling/StyledElementTests_Theming.cs
  18. 5
      tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs
  19. 5
      tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs
  20. 8
      tests/Avalonia.Controls.UnitTests/Presenters/CarouselPresenterTests.cs
  21. 14
      tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_InTemplate.cs
  22. 8
      tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests.cs
  23. 2
      tests/Avalonia.Controls.UnitTests/Primitives/PopupRootTests.cs
  24. 16
      tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs
  25. 15
      tests/Avalonia.Markup.UnitTests/Data/BindingTests_Self.cs
  26. 2
      tests/Avalonia.Markup.Xaml.UnitTests/Converters/AvaloniaPropertyConverterTest.cs
  27. 6
      tests/Avalonia.UnitTests/TestExtensions.cs

8
src/Avalonia.Base/StyledElement.cs

@ -59,8 +59,8 @@ namespace Avalonia
/// <summary>
/// Defines the <see cref="TemplatedParent"/> property.
/// </summary>
public static readonly DirectProperty<StyledElement, ITemplatedControl?> TemplatedParentProperty =
AvaloniaProperty.RegisterDirect<StyledElement, ITemplatedControl?>(
public static readonly DirectProperty<StyledElement, AvaloniaObject?> TemplatedParentProperty =
AvaloniaProperty.RegisterDirect<StyledElement, AvaloniaObject?>(
nameof(TemplatedParent),
o => o.TemplatedParent,
(o ,v) => o.TemplatedParent = v);
@ -81,7 +81,7 @@ namespace Avalonia
private Styles? _styles;
private bool _stylesApplied;
private bool _themeApplied;
private ITemplatedControl? _templatedParent;
private AvaloniaObject? _templatedParent;
private bool _dataContextUpdating;
private ControlTheme? _implicitTheme;
@ -241,7 +241,7 @@ namespace Avalonia
/// <summary>
/// Gets the styled element whose lookless template this styled element is part of.
/// </summary>
public ITemplatedControl? TemplatedParent
public AvaloniaObject? TemplatedParent
{
get => _templatedParent;
internal set => SetAndRaise(TemplatedParentProperty, ref _templatedParent, value);

2
src/Avalonia.Base/Styling/IStyleable.cs

@ -23,6 +23,6 @@ namespace Avalonia.Styling
/// <summary>
/// Gets the template parent of this element if the control comes from a template.
/// </summary>
ITemplatedControl? TemplatedParent { get; }
AvaloniaObject? TemplatedParent { get; }
}
}

9
src/Avalonia.Base/Styling/ITemplatedControl.cs

@ -1,9 +0,0 @@
using Avalonia.Metadata;
namespace Avalonia.Styling
{
[NotClientImplementable]
public interface ITemplatedControl
{
}
}

2
src/Avalonia.Controls/Presenters/IContentPresenterHost.cs

@ -17,7 +17,7 @@ namespace Avalonia.Controls.Presenters
/// interface.
/// </remarks>
[NotClientImplementable]
public interface IContentPresenterHost : ITemplatedControl
public interface IContentPresenterHost
{
/// <summary>
/// Gets a collection describing the logical children of the host control.

2
src/Avalonia.Controls/Presenters/IItemsPresenterHost.cs

@ -15,7 +15,7 @@ namespace Avalonia.Controls.Presenters
/// interface.
/// </remarks>
[NotClientImplementable]
public interface IItemsPresenterHost : ITemplatedControl
public interface IItemsPresenterHost
{
/// <summary>
/// Registers an <see cref="IItemsPresenter"/> with a host control.

2
src/Avalonia.Controls/Presenters/ItemsPresenterBase.cs

@ -14,7 +14,7 @@ namespace Avalonia.Controls.Presenters
/// <summary>
/// Base class for controls that present items inside an <see cref="ItemsControl"/>.
/// </summary>
public abstract class ItemsPresenterBase : Control, IItemsPresenter, ITemplatedControl, IChildIndexProvider
public abstract class ItemsPresenterBase : Control, IItemsPresenter, IChildIndexProvider
{
/// <summary>
/// Defines the <see cref="Items"/> property.

4
src/Avalonia.Controls/Primitives/TemplatedControl.cs

@ -14,7 +14,7 @@ namespace Avalonia.Controls.Primitives
/// <summary>
/// A lookless control whose visual appearance is defined by its <see cref="Template"/>.
/// </summary>
public class TemplatedControl : Control, ITemplatedControl
public class TemplatedControl : Control
{
/// <summary>
/// Defines the <see cref="Background"/> property.
@ -380,7 +380,7 @@ namespace Avalonia.Controls.Primitives
/// </summary>
/// <param name="control">The control.</param>
/// <param name="templatedParent">The templated parent to apply.</param>
internal static void ApplyTemplatedParent(StyledElement control, ITemplatedControl? templatedParent)
internal static void ApplyTemplatedParent(StyledElement control, AvaloniaObject? templatedParent)
{
control.SetValue(TemplatedParentProperty, templatedParent);

6
src/Avalonia.Controls/Templates/FuncControlTemplate.cs

@ -7,18 +7,18 @@ namespace Avalonia.Controls.Templates
/// <summary>
/// A template for a <see cref="TemplatedControl"/>.
/// </summary>
public class FuncControlTemplate : FuncTemplate<ITemplatedControl, Control>, IControlTemplate
public class FuncControlTemplate : FuncTemplate<TemplatedControl, Control>, IControlTemplate
{
/// <summary>
/// Initializes a new instance of the <see cref="FuncControlTemplate"/> class.
/// </summary>
/// <param name="build">The build function.</param>
public FuncControlTemplate(Func<ITemplatedControl, INameScope, Control> build)
public FuncControlTemplate(Func<TemplatedControl, INameScope, Control> build)
: base(build)
{
}
public new ControlTemplateResult Build(ITemplatedControl param)
public new ControlTemplateResult Build(TemplatedControl param)
{
var (control, scope) = BuildWithNameScope(param);
return new ControlTemplateResult(control, scope);

3
src/Avalonia.Controls/Templates/FuncControlTemplate`2.cs

@ -1,6 +1,5 @@
using System;
using Avalonia.Controls.Primitives;
using Avalonia.Styling;
namespace Avalonia.Controls.Templates
{
@ -8,7 +7,7 @@ namespace Avalonia.Controls.Templates
/// A template for a <see cref="TemplatedControl"/>.
/// </summary>
/// <typeparam name="T">The type of the lookless control.</typeparam>
public class FuncControlTemplate<T> : FuncControlTemplate where T : ITemplatedControl
public class FuncControlTemplate<T> : FuncControlTemplate where T : TemplatedControl
{
/// <summary>
/// Initializes a new instance of the <see cref="FuncControlTemplate{T}"/> class.

2
src/Avalonia.Controls/Templates/IControlTemplate.cs

@ -7,7 +7,7 @@ namespace Avalonia.Controls.Templates
/// <summary>
/// Interface representing a template used to build a <see cref="TemplatedControl"/>.
/// </summary>
public interface IControlTemplate : ITemplate<ITemplatedControl, ControlTemplateResult>
public interface IControlTemplate : ITemplate<TemplatedControl, ControlTemplateResult>
{
}

7
src/Avalonia.Controls/Templates/TemplateExtensions.cs

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Styling;
using Avalonia.VisualTree;
@ -9,15 +10,15 @@ namespace Avalonia.Controls.Templates
{
public static class TemplateExtensions
{
public static IEnumerable<Control> GetTemplateChildren(this ITemplatedControl control)
public static IEnumerable<Control> GetTemplateChildren(this TemplatedControl control)
{
foreach (Control child in GetTemplateChildren((Control)control, control))
foreach (Control child in GetTemplateChildren(control, control))
{
yield return child;
}
}
private static IEnumerable<Control> GetTemplateChildren(Control control, ITemplatedControl templatedParent)
private static IEnumerable<Control> GetTemplateChildren(Control control, TemplatedControl templatedParent)
{
foreach (Control child in control.GetVisualChildren())
{

5
src/Markup/Avalonia.Markup.Xaml/Templates/ControlTemplate.cs

@ -1,8 +1,7 @@
using System;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates;
using Avalonia.Metadata;
using Avalonia.Styling;
namespace Avalonia.Markup.Xaml.Templates
{
@ -14,6 +13,6 @@ namespace Avalonia.Markup.Xaml.Templates
public Type TargetType { get; set; }
public ControlTemplateResult Build(ITemplatedControl control) => TemplateContent.Load(Content);
public ControlTemplateResult Build(TemplatedControl control) => TemplateContent.Load(Content);
}
}

2
tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Class.cs

@ -62,7 +62,7 @@ namespace Avalonia.Base.UnitTests.Styling
var control = new Control1
{
Classes = { "foo" },
TemplatedParent = new Mock<ITemplatedControl>().Object,
TemplatedParent = new Button(),
};
var target = default(Selector).Class("foo");

2
tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Name.cs

@ -28,7 +28,7 @@ namespace Avalonia.Base.UnitTests.Styling
[Fact]
public void Name_Doesnt_Match_Control_With_TemplatedParent()
{
var control = new Control1 { TemplatedParent = new Mock<ITemplatedControl>().Object };
var control = new Control1 { TemplatedParent = new Button() };
var target = default(Selector).Name("foo");
var activator = target.Match(control);

2
tests/Avalonia.Base.UnitTests/Styling/SelectorTests_OfType.cs

@ -37,7 +37,7 @@ namespace Avalonia.Base.UnitTests.Styling
[Fact]
public void OfType_Matches_Control_With_TemplatedParent()
{
var control = new Control1 { TemplatedParent = new Mock<ITemplatedControl>().Object };
var control = new Control1 { TemplatedParent = new Button() };
var target = default(Selector).OfType<Control1>();
Assert.Equal(SelectorMatchResult.AlwaysThisType, target.Match(control).Result);

2
tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Template.cs

@ -118,7 +118,7 @@ namespace Avalonia.Base.UnitTests.Styling
Assert.Equal(0, target.Classes.ListenerCount);
}
private class TestTemplatedControl : TemplatedControl
private class TestTemplatedControl : Controls.Primitives.TemplatedControl
{
public TestTemplatedControl()
{

8
tests/Avalonia.Base.UnitTests/Styling/StyledElementTests_Theming.cs

@ -381,14 +381,14 @@ public class StyledElementTests_Theming
Setters =
{
new Setter(
TemplatedControl.TemplateProperty,
Controls.Primitives.TemplatedControl.TemplateProperty,
new FuncControlTemplate<ThemedControl2>((o, n) => new ThemedControl())),
},
Children =
{
new Style(x => x.Nesting().Template().OfType<ThemedControl>())
{
Setters = { new Setter(TemplatedControl.CornerRadiusProperty, new CornerRadius(7)), }
Setters = { new Setter(Controls.Primitives.TemplatedControl.CornerRadiusProperty, new CornerRadius(7)), }
},
}
},
@ -585,12 +585,12 @@ public class StyledElementTests_Theming
};
}
private class ThemedControl : TemplatedControl
private class ThemedControl : Controls.Primitives.TemplatedControl
{
public Visual? VisualChild => VisualChildren?.SingleOrDefault();
}
private class ThemedControl2 : TemplatedControl
private class ThemedControl2 : Controls.Primitives.TemplatedControl
{
public Visual? VisualChild => VisualChildren?.SingleOrDefault();
}

5
tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs

@ -1,5 +1,6 @@
using System.Linq;
using Avalonia.Controls.Presenters;
using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates;
using Avalonia.Input;
using Avalonia.Styling;
@ -84,7 +85,7 @@ namespace Avalonia.Controls.UnitTests
Assert.Equal(new[] { "Foo", "Bar" }, target.SelectedItems);
}
private Control CreateListBoxTemplate(ITemplatedControl parent, INameScope scope)
private Control CreateListBoxTemplate(TemplatedControl parent, INameScope scope)
{
return new ScrollViewer
{
@ -97,7 +98,7 @@ namespace Avalonia.Controls.UnitTests
};
}
private Control CreateScrollViewerTemplate(ITemplatedControl parent, INameScope scope)
private Control CreateScrollViewerTemplate(TemplatedControl parent, INameScope scope)
{
return new ScrollContentPresenter
{

5
tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs

@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using Avalonia.Controls.Presenters;
using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates;
using Avalonia.Data;
using Avalonia.Input;
@ -315,7 +316,7 @@ namespace Avalonia.Controls.UnitTests
}
}
private Control CreateListBoxTemplate(ITemplatedControl parent, INameScope scope)
private Control CreateListBoxTemplate(TemplatedControl parent, INameScope scope)
{
return new ScrollViewer
{
@ -328,7 +329,7 @@ namespace Avalonia.Controls.UnitTests
};
}
private Control CreateScrollViewerTemplate(ITemplatedControl parent, INameScope scope)
private Control CreateScrollViewerTemplate(TemplatedControl parent, INameScope scope)
{
return new ScrollContentPresenter
{

8
tests/Avalonia.Controls.UnitTests/Presenters/CarouselPresenterTests.cs

@ -14,12 +14,14 @@ namespace Avalonia.Controls.UnitTests.Presenters
[Fact]
public void Should_Register_With_Host_When_TemplatedParent_Set()
{
var host = new Mock<IItemsPresenterHost>();
var host = new Carousel();
var target = new CarouselPresenter();
target.SetValue(Control.TemplatedParentProperty, host.Object);
Assert.Null(host.Presenter);
host.Verify(x => x.RegisterItemsPresenter(target));
target.SetValue(Control.TemplatedParentProperty, host);
Assert.Same(target, host.Presenter);
}
[Fact]

14
tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_InTemplate.cs

@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reactive.Linq;
using Avalonia.Controls.Presenters;
using Avalonia.Controls.Templates;
@ -10,7 +9,6 @@ using Avalonia.LogicalTree;
using Avalonia.Styling;
using Avalonia.UnitTests;
using Avalonia.VisualTree;
using Moq;
using Xunit;
namespace Avalonia.Controls.UnitTests.Presenters
@ -23,12 +21,14 @@ namespace Avalonia.Controls.UnitTests.Presenters
[Fact]
public void Should_Register_With_Host_When_TemplatedParent_Set()
{
var host = new Mock<IContentPresenterHost>();
var target = new ContentPresenter();
var host = new ContentControl();
var target = new ContentPresenter { Name = "PART_ContentPresenter" };
target.SetValue(Control.TemplatedParentProperty, host.Object);
Assert.Null(host.Presenter);
host.Verify(x => x.RegisterContentPresenter(target));
target.SetValue(Control.TemplatedParentProperty, host);
Assert.Same(target, host.Presenter);
}
[Fact]
@ -394,7 +394,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
return ((ContentPresenter)templatedParent.Presenter, templatedParent);
}
private class TestContentControl : ContentControl
private class TestContentControl : ContentControl, IContentPresenterHost
{
public Control Child { get; set; }
}

8
tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests.cs

@ -16,12 +16,14 @@ namespace Avalonia.Controls.UnitTests.Presenters
[Fact]
public void Should_Register_With_Host_When_TemplatedParent_Set()
{
var host = new Mock<IItemsPresenterHost>();
var host = new ItemsControl();
var target = new ItemsPresenter();
target.SetValue(Control.TemplatedParentProperty, host.Object);
Assert.Null(host.Presenter);
host.Verify(x => x.RegisterItemsPresenter(target));
target.SetValue(Control.TemplatedParentProperty, host);
Assert.Same(target, host.Presenter);
}
[Fact]

2
tests/Avalonia.Controls.UnitTests/Primitives/PopupRootTests.cs

@ -346,7 +346,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
return result;
}
private class TemplatedControlWithPopup : TemplatedControl
private class TemplatedControlWithPopup : Avalonia.Controls.Primitives.TemplatedControl
{
public static readonly StyledProperty<Control> PopupContentProperty =
AvaloniaProperty.Register<TemplatedControlWithPopup, Control>(nameof(PopupContent));

16
tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs

@ -27,7 +27,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
return new Control();
});
var target = new TemplatedControl
var target = new Avalonia.Controls.Primitives.TemplatedControl
{
Template = template,
};
@ -46,7 +46,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
return new Control();
});
var target = new TemplatedControl
var target = new Avalonia.Controls.Primitives.TemplatedControl
{
Template = template,
};
@ -59,7 +59,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void ApplyTemplate_Should_Create_Visual_Children()
{
var target = new TemplatedControl
var target = new Avalonia.Controls.Primitives.TemplatedControl
{
Template = new FuncControlTemplate((_, __) => new Decorator
{
@ -93,7 +93,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Templated_Children_Should_Have_TemplatedParent_Set()
{
var target = new TemplatedControl
var target = new Avalonia.Controls.Primitives.TemplatedControl
{
Template = new FuncControlTemplate((_, __) => new Decorator
{
@ -122,7 +122,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Templated_Child_Should_Have_Parent_Set()
{
var target = new TemplatedControl
var target = new Avalonia.Controls.Primitives.TemplatedControl
{
Template = new FuncControlTemplate((_, __) => new Decorator())
};
@ -138,7 +138,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Changing_Template_Should_Clear_Old_Templated_Childs_Parent()
{
var target = new TemplatedControl
var target = new Avalonia.Controls.Primitives.TemplatedControl
{
Template = new FuncControlTemplate((_, __) => new Decorator())
};
@ -156,7 +156,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Nested_Templated_Control_Should_Not_Have_Template_Applied()
{
var target = new TemplatedControl
var target = new Avalonia.Controls.Primitives.TemplatedControl
{
Template = new FuncControlTemplate((_, __) => new ScrollViewer())
};
@ -263,7 +263,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
target.TemplateApplied += (s, e) =>
{
Assert.Equal(TemplatedControl.TemplateAppliedEvent, e.RoutedEvent);
Assert.Equal(Avalonia.Controls.Primitives.TemplatedControl.TemplateAppliedEvent, e.RoutedEvent);
Assert.Same(target, e.Source);
Assert.NotNull(e.NameScope);
raised = true;

15
tests/Avalonia.Markup.UnitTests/Data/BindingTests_Self.cs

@ -6,6 +6,7 @@ using Avalonia.Styling;
using Xunit;
using System.Reactive.Disposables;
using Avalonia.Markup.Data;
using Avalonia.Controls.Primitives;
namespace Avalonia.Markup.UnitTests.Data
{
@ -42,19 +43,5 @@ namespace Avalonia.Markup.UnitTests.Data
target.Text = "Goodbye cruel world :(";
Assert.Equal("Goodbye cruel world :(", target.Text);
}
private Mock<Control> CreateTarget(
ITemplatedControl templatedParent = null,
string text = null)
{
var result = new Mock<Control>();
result.Setup(x => x.GetValue(Control.TemplatedParentProperty)).Returns(templatedParent);
result.Setup(x => x.GetValue((AvaloniaProperty)Control.TemplatedParentProperty)).Returns(templatedParent);
result.Setup(x => x.GetValue((AvaloniaProperty)TextBox.TextProperty)).Returns(text);
result.Setup(x => x.Bind(It.IsAny<AvaloniaProperty>(), It.IsAny<IObservable<object>>(), It.IsAny<BindingPriority>()))
.Returns(Disposable.Empty);
return result;
}
}
}

2
tests/Avalonia.Markup.Xaml.UnitTests/Converters/AvaloniaPropertyConverterTest.cs

@ -132,7 +132,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Converters
get { throw new NotImplementedException(); }
}
public ITemplatedControl TemplatedParent
public AvaloniaObject TemplatedParent
{
get { throw new NotImplementedException(); }
}

6
tests/Avalonia.UnitTests/TestExtensions.cs

@ -1,5 +1,6 @@
using System;
using Avalonia.Controls.Presenters;
using Avalonia.Controls.Primitives;
using Avalonia.Layout;
using Avalonia.Styling;
@ -9,10 +10,5 @@ namespace Avalonia.UnitTests
{
public static void ApplyTemplate(this IContentPresenter presenter) => ((Layoutable)presenter).ApplyTemplate();
public static void ApplyTemplate(this IItemsPresenter presenter) => ((Layoutable)presenter).ApplyTemplate();
public static IObservable<T> GetObservable<T>(this ITemplatedControl control, AvaloniaProperty<T> property)
{
return ((AvaloniaObject)control).GetObservable(property);
}
}
}

Loading…
Cancel
Save