diff --git a/src/Avalonia.Controls/Flyouts/Flyout.cs b/src/Avalonia.Controls/Flyouts/Flyout.cs index c0d3600c1ec..cebcbb65625 100644 --- a/src/Avalonia.Controls/Flyouts/Flyout.cs +++ b/src/Avalonia.Controls/Flyouts/Flyout.cs @@ -13,12 +13,22 @@ public class Flyout : PopupFlyoutBase public static readonly StyledProperty ContentProperty = AvaloniaProperty.Register(nameof(Content)); + private Classes? _classes; + /// /// Gets the Classes collection to apply to the FlyoutPresenter this Flyout is hosting /// - public Classes FlyoutPresenterClasses => _classes ??= new Classes(); - - private Classes? _classes; + public Classes FlyoutPresenterClasses + { + get => _classes ??= new Classes(); + set + { + if (_classes is null) + _classes = value; + else if (_classes != value) + _classes.Replace(value); + } + } /// /// Defines the property. diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDeferredResourceTransformer.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDeferredResourceTransformer.cs index c29dd948861..15fa8897abc 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDeferredResourceTransformer.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDeferredResourceTransformer.cs @@ -65,7 +65,8 @@ public AdderSetter(IXamlMethod getter, IXamlMethod adder) { AllowMultiple = true, AllowXNull = allowNull, - AllowRuntimeNull = allowNull + AllowRuntimeNull = allowNull, + AllowAttributeSyntax = false, }; } diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDesignPropertiesTransformer.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDesignPropertiesTransformer.cs index 3096be522fd..d0232fc64de 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDesignPropertiesTransformer.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDesignPropertiesTransformer.cs @@ -37,7 +37,7 @@ public IXamlAstNode Transform(AstTransformationContext context, IXamlAstNode nod on.Children[c] = new XamlAstXamlPropertyValueNode(ch, new XamlAstNamePropertyReference(ch, new XamlAstXmlTypeReference(ch, AvaloniaNs, "Design"), - mapTo, on.Type), directive.Values); + mapTo, on.Type), directive.Values, true); c++; } } diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/XDataTypeTransformer.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/XDataTypeTransformer.cs index 845dc5f831f..8e055da43b2 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/XDataTypeTransformer.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/XDataTypeTransformer.cs @@ -52,7 +52,8 @@ public IXamlAstNode Transform(AstTransformationContext context, IXamlAstNode nod new XamlAstNamePropertyReference(d, new XamlAstClrTypeReference(ch, declaringType, false), dataTypeProperty.Name, on.Type), - d.Values); + d.Values, + true); } } } diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/XNameTransformer.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/XNameTransformer.cs index f4eb7cf5f92..3a18d56cd08 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/XNameTransformer.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/XNameTransformer.cs @@ -24,7 +24,7 @@ public IXamlAstNode Transform(AstTransformationContext context, IXamlAstNode nod on.Children[c] = new XamlAstXamlPropertyValueNode(d, new XamlAstNamePropertyReference(d, on.Type, "Name", on.Type), - d.Values); + d.Values, true); } } diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github b/src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github index 5e498f8bcca..5dd0b042e14 160000 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github @@ -1 +1 @@ -Subproject commit 5e498f8bcca403a34aff5efc825cbb4e12b7fa8e +Subproject commit 5dd0b042e144e677638224c49fec16dab66143e8 diff --git a/src/tools/Avalonia.Generators/Compiler/NameDirectiveTransformer.cs b/src/tools/Avalonia.Generators/Compiler/NameDirectiveTransformer.cs index 2d4d3225b7e..2009eb7e464 100644 --- a/src/tools/Avalonia.Generators/Compiler/NameDirectiveTransformer.cs +++ b/src/tools/Avalonia.Generators/Compiler/NameDirectiveTransformer.cs @@ -20,9 +20,9 @@ public IXamlAstNode Transform(AstTransformationContext context, IXamlAstNode nod objectNode.Children[index] = new XamlAstXamlPropertyValueNode( directive, new XamlAstNamePropertyReference(directive, objectNode.Type, "Name", objectNode.Type), - directive.Values); + directive.Values, true); } return node; } -} \ No newline at end of file +} diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs index 5d55c831a39..25c05167446 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs @@ -910,7 +910,33 @@ public void Should_Parse_And_Populate_Type_Without_Public_Ctor() Assert.Equal("World", target.Test2); Assert.Equal("Hello", target.Test1); } - + + [Fact] + public void Can_Specify_Button_Classes() + { + var xaml = "