|
|
@ -16,8 +16,15 @@ namespace Avalonia.Controls.Templates |
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
/// <param name="control">The control materializing the data template.</param>
|
|
|
/// <param name="control">The control materializing the data template.</param>
|
|
|
/// <param name="data">The data.</param>
|
|
|
/// <param name="data">The data.</param>
|
|
|
|
|
|
/// <param name="primary">
|
|
|
|
|
|
/// An optional primary template that can will be tried before the
|
|
|
|
|
|
/// <see cref="IControl.DataTemplates"/> in the tree are searched.
|
|
|
|
|
|
/// </param>
|
|
|
/// <returns>The data materialized as a control.</returns>
|
|
|
/// <returns>The data materialized as a control.</returns>
|
|
|
public static IControl MaterializeDataTemplate(this IControl control, object data) |
|
|
public static IControl MaterializeDataTemplate( |
|
|
|
|
|
this IControl control, |
|
|
|
|
|
object data, |
|
|
|
|
|
IDataTemplate primary = null) |
|
|
{ |
|
|
{ |
|
|
if (data == null) |
|
|
if (data == null) |
|
|
{ |
|
|
{ |
|
|
@ -33,7 +40,7 @@ namespace Avalonia.Controls.Templates |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
IDataTemplate template = control.FindDataTemplate(data); |
|
|
IDataTemplate template = control.FindDataTemplate(data, primary); |
|
|
IControl result; |
|
|
IControl result; |
|
|
|
|
|
|
|
|
if (template != null) |
|
|
if (template != null) |
|
|
@ -57,9 +64,21 @@ namespace Avalonia.Controls.Templates |
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
/// <param name="control">The control searching for the data template.</param>
|
|
|
/// <param name="control">The control searching for the data template.</param>
|
|
|
/// <param name="data">The data.</param>
|
|
|
/// <param name="data">The data.</param>
|
|
|
|
|
|
/// <param name="primary">
|
|
|
|
|
|
/// An optional primary template that can will be tried before the
|
|
|
|
|
|
/// <see cref="IControl.DataTemplates"/> in the tree are searched.
|
|
|
|
|
|
/// </param>
|
|
|
/// <returns>The data template or null if no matching data template was found.</returns>
|
|
|
/// <returns>The data template or null if no matching data template was found.</returns>
|
|
|
public static IDataTemplate FindDataTemplate(this IControl control, object data) |
|
|
public static IDataTemplate FindDataTemplate( |
|
|
|
|
|
this IControl control, |
|
|
|
|
|
object data, |
|
|
|
|
|
IDataTemplate primary = null) |
|
|
{ |
|
|
{ |
|
|
|
|
|
if (primary?.Match(data) == true) |
|
|
|
|
|
{ |
|
|
|
|
|
return primary; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
foreach (var i in control.GetSelfAndLogicalAncestors().OfType<IControl>()) |
|
|
foreach (var i in control.GetSelfAndLogicalAncestors().OfType<IControl>()) |
|
|
{ |
|
|
{ |
|
|
foreach (IDataTemplate dt in i.DataTemplates) |
|
|
foreach (IDataTemplate dt in i.DataTemplates) |
|
|
|