diff --git a/Documentation/build.md b/Documentation/build.md
index a7d68eb599..9f5436e68e 100644
--- a/Documentation/build.md
+++ b/Documentation/build.md
@@ -6,6 +6,7 @@ Avalonia requires at least Visual Studio 2019 and .NET Core SDK 3.1 to build on
```
git clone https://github.com/AvaloniaUI/Avalonia.git
+cd Avalonia
git submodule update --init
```
diff --git a/packages/Avalonia/AvaloniaBuildTasks.targets b/packages/Avalonia/AvaloniaBuildTasks.targets
index 45a7f1aa44..de3830ffea 100644
--- a/packages/Avalonia/AvaloniaBuildTasks.targets
+++ b/packages/Avalonia/AvaloniaBuildTasks.targets
@@ -42,12 +42,24 @@
- $(BuildAvaloniaResourcesDependsOn);AddAvaloniaResources;ResolveReferences
+ $(BuildAvaloniaResourcesDependsOn);AddAvaloniaResources;ResolveReferences;_GenerateAvaloniaResourcesDependencyCache
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Base/Metadata/TemplateContent.cs b/src/Avalonia.Base/Metadata/TemplateContent.cs
index fcd7d69e7b..7f9e878419 100644
--- a/src/Avalonia.Base/Metadata/TemplateContent.cs
+++ b/src/Avalonia.Base/Metadata/TemplateContent.cs
@@ -8,5 +8,6 @@ namespace Avalonia.Metadata
[AttributeUsage(AttributeTargets.Property)]
public class TemplateContentAttribute : Attribute
{
+ public Type TemplateResultType { get; set; }
}
}
diff --git a/src/Avalonia.Controls/Design.cs b/src/Avalonia.Controls/Design.cs
index 0d05e19e53..07d2918a88 100644
--- a/src/Avalonia.Controls/Design.cs
+++ b/src/Avalonia.Controls/Design.cs
@@ -60,6 +60,19 @@ namespace Avalonia.Controls
return target.GetValue(PreviewWithProperty);
}
+ public static readonly AttachedProperty DesignStyleProperty = AvaloniaProperty
+ .RegisterAttached("DesignStyle", typeof(Design));
+
+ public static void SetDesignStyle(Control control, IStyle value)
+ {
+ control.SetValue(DesignStyleProperty, value);
+ }
+
+ public static IStyle GetDesignStyle(Control control)
+ {
+ return control.GetValue(DesignStyleProperty);
+ }
+
public static void ApplyDesignModeProperties(Control target, Control source)
{
if (source.IsSet(WidthProperty))
@@ -68,6 +81,8 @@ namespace Avalonia.Controls
target.Height = source.GetValue(HeightProperty);
if (source.IsSet(DataContextProperty))
target.DataContext = source.GetValue(DataContextProperty);
+ if (source.IsSet(DesignStyleProperty))
+ target.Styles.Add(source.GetValue(DesignStyleProperty));
}
}
}
diff --git a/src/Avalonia.Controls/Flyouts/FlyoutBase.cs b/src/Avalonia.Controls/Flyouts/FlyoutBase.cs
index 230b4954fe..4b903d056c 100644
--- a/src/Avalonia.Controls/Flyouts/FlyoutBase.cs
+++ b/src/Avalonia.Controls/Flyouts/FlyoutBase.cs
@@ -215,11 +215,6 @@ namespace Avalonia.Controls.Primitives
}
}
- if (CancelOpening())
- {
- return false;
- }
-
if (Popup.Parent != null && Popup.Parent != placementTarget)
{
((ISetLogicalParent)Popup).SetParent(null);
@@ -236,6 +231,11 @@ namespace Avalonia.Controls.Primitives
Popup.Child = CreatePresenter();
}
+ if (CancelOpening())
+ {
+ return false;
+ }
+
PositionPopup(showAtPointer);
IsOpen = Popup.IsOpen = true;
OnOpened();
diff --git a/src/Avalonia.Controls/ItemsSourceView.cs b/src/Avalonia.Controls/ItemsSourceView.cs
index b2663f3213..c2d20495ef 100644
--- a/src/Avalonia.Controls/ItemsSourceView.cs
+++ b/src/Avalonia.Controls/ItemsSourceView.cs
@@ -32,8 +32,8 @@ namespace Avalonia.Controls
///
public static ItemsSourceView Empty { get; } = new ItemsSourceView(Array.Empty