Browse Source

Fix exception when closing color picker.

And add tests.
pull/13970/head
Steven Kirk 3 years ago
parent
commit
1427090c32
  1. 3
      src/Markup/Avalonia.Markup.Xaml/Data/DynamicResourceExpression.cs
  2. 28
      tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/DynamicResourceExtensionTests.cs
  3. 30
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlThemeTests.cs

3
src/Markup/Avalonia.Markup.Xaml/Data/DynamicResourceExpression.cs

@ -86,6 +86,9 @@ namespace Avalonia.Markup.Xaml.MarkupExtensions
private void ActualThemeVariantChanged(object? sender, EventArgs e)
{
if (!IsRunning)
return;
_themeVariant = ((IThemeVariantHost)sender!).ActualThemeVariant;
PublishValue();
}

28
tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/DynamicResourceExtensionTests.cs

@ -896,6 +896,34 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
Assert.DoesNotContain("foo", resourceProvider.RequestedResources);
}
[Fact]
public void Can_Detach_Control_With_DynamicResource_ControlTheme_That_Contains_DynamicResource()
{
using var app = UnitTestApplication.Start(TestServices.StyledWindow);
var xaml = $@"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
RequestedThemeVariant='Light'>
<Window.Resources>
<SolidColorBrush x:Key='Blue'>Blue</SolidColorBrush>
<ControlTheme x:Key='MyTheme' TargetType='Button'>
<Setter Property='Background' Value='{{DynamicResource Blue}}'/>
</ControlTheme>
</Window.Resources>
<Button Theme='{{DynamicResource MyTheme}}'/>
</Window>";
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
var target = Assert.IsType<Button>(window.Content);
window.Show();
Assert.Equal(Colors.Blue, ((ISolidColorBrush)target.Background).Color);
window.Content = null;
}
private IDisposable StyledWindow(params (string, string)[] assets)
{
var services = TestServices.StyledWindow.With(

30
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlThemeTests.cs

@ -38,6 +38,36 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
}
}
[Fact]
public void ControlTheme_Can_Be_DynamicResource()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = $@"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:u='using:Avalonia.Markup.Xaml.UnitTests.Xaml'>
<Window.Resources>
{ControlThemeXaml}
</Window.Resources>
<u:TestTemplatedControl Theme='{{DynamicResource MyTheme}}'/>
</Window>";
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
var button = Assert.IsType<TestTemplatedControl>(window.Content);
window.Show();
Assert.NotNull(button.Template);
var child = Assert.Single(button.GetVisualChildren());
var border = Assert.IsType<Border>(child);
Assert.Equal(Brushes.Red, border.Background);
}
}
[Fact]
public void ControlTheme_Can_Be_Set_In_Style()
{

Loading…
Cancel
Save