Browse Source

Fix template parent compiled bindings with "!" in the beginning

pull/9460/head
Max Katz 3 years ago
parent
commit
7b00f34df8
  1. 5
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/CompiledBindings/CompiledBindingPath.cs
  2. 8
      tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs

5
src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/CompiledBindings/CompiledBindingPath.cs

@ -75,8 +75,9 @@ namespace Avalonia.Markup.Xaml.MarkupExtensions.CompiledBindings
}
internal IEnumerable<ICompiledBindingPathElement> Elements => _elements;
internal SourceMode SourceMode => _elements.Count > 0 && _elements[0] is IControlSourceBindingPathElement ? SourceMode.Control : SourceMode.Data;
internal SourceMode SourceMode => _elements.OfType<IControlSourceBindingPathElement>().Any()
? SourceMode.Control : SourceMode.Data;
internal object RawSource { get; }

8
tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs

@ -734,12 +734,12 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
{
var xaml = @"
<ContentControl xmlns='https://github.com/avaloniaui'
Content='Hello'>
Focusable='True'>
<ContentControl.Styles>
<Style Selector='ContentControl'>
<Setter Property='Template'>
<ControlTemplate>
<ContentPresenter Content='{CompiledBinding Content, RelativeSource={RelativeSource TemplatedParent}}' />
<ContentPresenter Focusable='{CompiledBinding !Focusable, RelativeSource={RelativeSource TemplatedParent}}' />
</ControlTemplate>
</Setter>
</Style>
@ -747,10 +747,11 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
</ContentControl>";
var contentControl = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
contentControl.DataContext = new TestDataContext(); // should be ignored
contentControl.Measure(new Size(10, 10));
var result = contentControl.GetTemplateChildren().OfType<ContentPresenter>().First();
Assert.Equal("Hello", result.Content);
Assert.Equal(false, result.Focusable);
}
}
@ -781,6 +782,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
</TextBox>";
var textBox = AvaloniaRuntimeXamlLoader.Parse<TextBox>(xaml);
textBox.DataContext = new TestDataContext(); // should be ignored
textBox.Measure(new Size(10, 10));
var result = textBox.GetTemplateChildren().OfType<ContentPresenter>().First();

Loading…
Cancel
Save