浏览代码

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

Max Katz 2 年之前
父节点
当前提交
7b00f34df8

+ 3 - 2
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 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; }
         internal object RawSource { get; }
 
 

+ 5 - 3
tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs

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