Browse Source
* Update XamlX * Include nested types PR as well * Fix Designer.HostApp compilation on older targetspull/17022/head
committed by
GitHub
11 changed files with 119 additions and 28 deletions
@ -1 +1 @@ |
|||||
Subproject commit 14fed0cb0666a9b3f71cb635cf61eb6010d4ff64 |
Subproject commit ab84721302d6ed2b8b65315f3c54217693640348 |
||||
@ -0,0 +1,71 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using Avalonia.Controls; |
||||
|
using Avalonia.Controls.Documents; |
||||
|
using Avalonia.Data; |
||||
|
using Avalonia.Data.Core; |
||||
|
using Avalonia.Markup.Xaml.MarkupExtensions; |
||||
|
using Avalonia.Media; |
||||
|
using Avalonia.UnitTests; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Avalonia.Markup.Xaml.UnitTests.Xaml; |
||||
|
|
||||
|
public class ProvideValueTargetTests : XamlTestBase |
||||
|
{ |
||||
|
[Fact] |
||||
|
public void ProvideValueTarget_Has_Correct_Targets_Set() |
||||
|
{ |
||||
|
using var _ = UnitTestApplication.Start(TestServices.StyledWindow); |
||||
|
|
||||
|
var capturedTargets = new CapturedTargets(); |
||||
|
AvaloniaLocator.CurrentMutable.BindToSelf(capturedTargets); |
||||
|
|
||||
|
AvaloniaRuntimeXamlLoader.Load(@"
|
||||
|
<Window xmlns='https://github.com/avaloniaui'
|
||||
|
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
|
||||
|
xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests' |
||||
|
Foreground='{local:CapturingTargetsMarkup}' |
||||
|
x:CompileBindings='True'> |
||||
|
|
||||
|
<TextBlock Tag='{Binding Source={local:CapturingTargetsMarkup}}' |
||||
|
Background='{local:CapturingTargetsMarkup}' /> |
||||
|
|
||||
|
</Window>");
|
||||
|
|
||||
|
Assert.Collection(capturedTargets.Targets, |
||||
|
item => |
||||
|
{ |
||||
|
Assert.IsType<Window>(item.TargetObject); |
||||
|
Assert.Equal(TextElement.ForegroundProperty, item.TargetProperty); |
||||
|
}, |
||||
|
item => |
||||
|
{ |
||||
|
Assert.IsAssignableFrom<CompiledBindingExtension>(item.TargetObject); |
||||
|
var prop = Assert.IsType<ClrPropertyInfo>(item.TargetProperty); |
||||
|
Assert.Equal(nameof(Binding.Source), prop.Name); |
||||
|
}, |
||||
|
item => |
||||
|
{ |
||||
|
Assert.IsType<TextBlock>(item.TargetObject); |
||||
|
Assert.Equal(TextBlock.BackgroundProperty, item.TargetProperty); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public class CapturedTargets |
||||
|
{ |
||||
|
public List<(object TargetObject, object TargetProperty)> Targets { get; } = []; |
||||
|
} |
||||
|
|
||||
|
public class CapturingTargetsMarkupExtension |
||||
|
{ |
||||
|
public object ProvideValue(IServiceProvider serviceProvider) |
||||
|
{ |
||||
|
var parentsProvider = serviceProvider.GetRequiredService<IProvideValueTarget>(); |
||||
|
var capturedTargets = AvaloniaLocator.Current.GetRequiredService<CapturedTargets>(); |
||||
|
capturedTargets.Targets.Add((parentsProvider.TargetObject, parentsProvider.TargetProperty)); |
||||
|
return Brushes.DarkViolet; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue