Browse Source

Merge branch 'master' into fixes/4944-combobox-visualbrush

pull/5024/head
Dariusz Komosiński 6 years ago
committed by GitHub
parent
commit
392df504fe
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      src/Avalonia.Controls/Templates/DataTemplateExtensions.cs
  2. 2
      src/Markup/Avalonia.Markup/Markup/Parsers/BindingExpressionGrammar.cs

28
src/Avalonia.Controls/Templates/DataTemplateExtensions.cs

@ -1,6 +1,7 @@
using System.Linq;
using Avalonia.LogicalTree;
#nullable enable
namespace Avalonia.Controls.Templates
{
/// <summary>
@ -18,21 +19,23 @@ namespace Avalonia.Controls.Templates
/// tree are searched.
/// </param>
/// <returns>The data template or null if no matching data template was found.</returns>
public static IDataTemplate FindDataTemplate(
public static IDataTemplate? FindDataTemplate(
this IControl control,
object data,
IDataTemplate primary = null)
IDataTemplate? primary = null)
{
if (primary?.Match(data) == true)
{
return primary;
}
foreach (var i in control.GetSelfAndLogicalAncestors().OfType<IDataTemplateHost>())
var currentTemplateHost = control as ILogical;
while (currentTemplateHost != null)
{
if (i.IsDataTemplatesInitialized)
if (currentTemplateHost is IDataTemplateHost hostCandidate && hostCandidate.IsDataTemplatesInitialized)
{
foreach (IDataTemplate dt in i.DataTemplates)
foreach (IDataTemplate dt in hostCandidate.DataTemplates)
{
if (dt.Match(data))
{
@ -40,20 +43,19 @@ namespace Avalonia.Controls.Templates
}
}
}
currentTemplateHost = currentTemplateHost.LogicalParent;
}
IGlobalDataTemplates global = AvaloniaLocator.Current.GetService<IGlobalDataTemplates>();
if (global != null)
if (global != null && global.IsDataTemplatesInitialized)
{
if (global.IsDataTemplatesInitialized)
foreach (IDataTemplate dt in global.DataTemplates)
{
foreach (IDataTemplate dt in global.DataTemplates)
if (dt.Match(data))
{
if (dt.Match(data))
{
return dt;
}
return dt;
}
}
}

2
src/Markup/Avalonia.Markup/Markup/Parsers/BindingExpressionGrammar.cs

@ -16,7 +16,7 @@ namespace Avalonia.Markup.Parsers
internal static class BindingExpressionGrammar
{
public static (IList<INode> Nodes, SourceMode Mode) Parse(ref CharacterReader r)
public static (List<INode> Nodes, SourceMode Mode) Parse(ref CharacterReader r)
{
var nodes = new List<INode>();
var state = State.Start;

Loading…
Cancel
Save