Add project files.

This commit is contained in:
Daniel Clark
2022-11-01 15:26:08 +00:00
parent daa7b59f22
commit 7e4f880821
408 changed files with 16863 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>TheXamlGuy.UI.Avalonia</RootNamespace>
<AssemblyName>TheXamlGuy.UI.Avalonia</AssemblyName>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="11.0.0-preview3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\UI\UI.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="FluentAvalonia">
<HintPath>References\FluentAvalonia.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
@@ -0,0 +1,11 @@
using Avalonia.Data;
namespace TheXamlGuy.UI.Avalonia;
public static class MarkupExtensions
{
public static Binding ToBinding(this object value)
{
return value is Binding binding ? binding : new Binding() { Mode = BindingMode.OneWay, Source = value };
}
}
@@ -0,0 +1,82 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Data;
using System.ComponentModel;
using System.Globalization;
using System.Reflection;
namespace TheXamlGuy.UI.Avalonia;
public class ChangePropertyExtension : TriggerExtension
{
private static readonly AvaloniaProperty PropertyTargetProperty =
AvaloniaProperty.RegisterAttached<ChangePropertyExtension, Control, object>("PropertyTarget");
private static readonly AvaloniaProperty PropertyValueProperty =
AvaloniaProperty.RegisterAttached<ChangePropertyExtension, Control, object>("PropertyValue");
private readonly string name;
private readonly BindingBase targetBinding;
private readonly BindingBase valueBinding;
public ChangePropertyExtension(object target, string name, object value)
{
this.targetBinding = target is BindingBase targetBinding ? targetBinding : target.ToBinding();
this.valueBinding = value is BindingBase valueBinding ? valueBinding : value.ToBinding();
this.name = name;
}
protected override void OnInvoked(object sender, EventArgs args)
{
TargetObject?.Bind(PropertyTargetProperty, targetBinding);
if (TargetObject?.GetValue(PropertyTargetProperty) is { } target)
{
Type? targetType = target.GetType();
if (targetType.GetProperty(name) is PropertyInfo propertyInfo)
{
TargetObject?.Bind(PropertyValueProperty, valueBinding);
object? value = TargetObject?.GetValue(PropertyValueProperty);
TypeConverter? converter = TypeConverterHelper.GetTypeConverter(propertyInfo.PropertyType);
object? newValue = value;
if (value is not null)
{
if (converter?.CanConvertFrom(value.GetType()) == true)
{
newValue = converter.ConvertFrom(null, CultureInfo.InvariantCulture, value);
}
else
{
if (converter?.CanConvertTo(propertyInfo.PropertyType) == true)
{
newValue = converter.ConvertTo(null, CultureInfo.InvariantCulture, value, propertyInfo.PropertyType);
}
}
}
if (target is TemplatedControl control )
{
if (AvaloniaPropertyRegistry.Instance.FindRegistered(targetType, name) is AvaloniaProperty property)
{
control.SetValue(property, newValue);
}
if (propertyInfo.PropertyType == typeof(Classes))
{
control.Classes.Clear();
control.Classes.Add($"{newValue}");
}
}
else
{
propertyInfo?.SetValue(target, newValue, Array.Empty<object>());
}
}
}
}
}
+320
View File
@@ -0,0 +1,320 @@
using Avalonia.Markup.Xaml;
namespace TheXamlGuy.UI.Avalonia;
public class CompositeExtension : TriggerExtension
{
[ConstructorArgument(nameof(Triggers))]
public TriggerCollection Triggers { get; } = new TriggerCollection();
public CompositeExtension(object args0)
{
Triggers.Add(args0);
}
public CompositeExtension(object args0,
object args1)
{
Triggers.Add(args0);
Triggers.Add(args1);
}
public CompositeExtension(object args0,
object args1,
object args2)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
}
public CompositeExtension(object args0, object args1, object args2, object args3, object args4,
object args5, object args6, object args7, object args8, object args9, object args10)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
}
public CompositeExtension(object args0, object args1, object args2, object args3, object args4,
object args5, object args6, object args7, object args8, object args9, object args10, object args11)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
Triggers.Add(args13);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
Triggers.Add(args13);
Triggers.Add(args14);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14,
object args15)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
Triggers.Add(args13);
Triggers.Add(args14);
Triggers.Add(args15);
}
protected override void OnInvoked(object sender, EventArgs args)
{
foreach (Delegate? trigger in Triggers)
{
trigger.Method.Invoke(trigger.Target, new object[] { sender, args });
}
base.OnInvoked(sender, args);
}
}
+451
View File
@@ -0,0 +1,451 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Data;
using Avalonia.Markup.Xaml;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
namespace TheXamlGuy.UI.Avalonia;
[ConstructorArgument(nameof(name))]
public class InvokeExtension : TriggerExtension
{
private static readonly AvaloniaProperty TargetProperty =
AvaloniaProperty.RegisterAttached<InvokeExtension, Control, object>("Target");
private readonly object name;
private readonly List<object> parameters = new();
public InvokeExtension(object name)
{
this.name = name;
}
public InvokeExtension(string name,
object args1)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4,
object args5)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding());
}
public InvokeExtension(string name,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14,
object args15)
{
this.name = name;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding());
parameters.Add(args15 is MarkupExtension ? args15 : args15.ToBinding());
}
// KEEP THIS
//protected override void OnAttached(IServiceProvider serviceProvider)
//{
// if (name.StartsWith("$"))
// {
// if (serviceProvider is ITypeDescriptorContext typeDescriptorContext)
// {
// targetBinding = new(name) { DefaultAnchor = new WeakReference(TargetObject) };
// if (serviceProvider.GetService(typeof(INameScope)) is INameScope nameScope)
// {
// targetBinding.NameScope = new WeakReference<INameScope>(nameScope);
// }
// if (typeDescriptorContext.GetService(typeof(IXamlTypeResolver)) is IXamlTypeResolver xamlTypeResolver)
// {
// targetBinding.TypeResolver = (prefix, type) =>
// {
// string name = string.IsNullOrEmpty(prefix) ? type : $"{prefix}:{type}";
// return xamlTypeResolver.Resolve(name);
// };
// }
// }
// }
// base.OnAttached(serviceProvider);
//}
protected override void OnInvoked(object sender, EventArgs args)
{
if (sender is AvaloniaObject avaloniaObject)
{
CreaterHandler(avaloniaObject, args);
}
}
private void CreaterHandler(AvaloniaObject sender, EventArgs args)
{
if (TryGetInvoke(sender, out (object? Target, MethodInfo? MethodInfo) invoker))
{
if (invoker.Target is object target)
{
if (invoker.MethodInfo is MethodInfo methodInfo)
{
ParameterInfo[] parameterInfo = methodInfo.GetParameters();
List<object> parameters = new();
//foreach (object? parameter in this.parameters)
//{
// switch (parameter)
// {
// case IParameter keyedParameter:
// BindingOperations.SetBinding(sender, ParameterProperty, parameter.ToBinding());
// parameters.Add(new KeyValuePair<string, object>(keyedParameter.Key, (dynamic)sender.GetValue(ParameterProperty)));
// break;
// case IEventParameter eventParameter:
// parameters.AddRange(eventParameter.GetParameters(args));
// break;
// default:
// BindingOperations.SetBinding(sender, ParameterProperty, parameter.ToBinding());
// parameters.Add((dynamic)sender.GetValue(ParameterProperty));
// break;
// }
//}
methodInfo.Invoke(target is Action action ? action.Target : target, parameters.Any() ? parameters.ToArray() : parameterInfo.Length > 0 ? new object?[] { null } : Array.Empty<object>());
}
}
}
}
private bool TryGetInvoke(AvaloniaObject sender, [AllowNull] out (object?, MethodInfo?) invoker)
{
if (name is Binding binding)
{
sender.Bind(TargetProperty, binding);
if (sender.GetValue(TargetProperty) is Action action)
{
invoker = new(action.Target, action.Method);
return true;
}
}
if (name is string)
{
if (sender.GetValue(StyledElement.DataContextProperty) is object dataContext)
{
if (dataContext.GetType().GetMethod((string)name, BindingFlags.Public | BindingFlags.Instance) is MethodInfo methodInfo)
{
invoker = new(dataContext, methodInfo);
return true;
}
}
}
invoker = default;
return false;
}
}
+14
View File
@@ -0,0 +1,14 @@
using System.Collections.ObjectModel;
namespace TheXamlGuy.UI.Avalonia;
public class TriggerCollection : Collection<Delegate>
{
public void Add(object item)
{
if (item is Delegate trigger)
{
base.Add(trigger);
}
}
}
+74
View File
@@ -0,0 +1,74 @@
using Avalonia;
using Avalonia.Markup.Xaml;
using System.Reflection;
namespace TheXamlGuy.UI.Avalonia;
public class TriggerExtension : MarkupExtension
{
public AvaloniaObject? TargetObject { get; protected set; }
protected object? TargetInvoke { get; private set; }
public void Invoke(object sender, EventArgs args)
{
OnInvoked(sender, args);
}
public override object? ProvideValue(IServiceProvider serviceProvider)
{
if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget target)
{
if (target.TargetObject is AvaloniaObject avaloniaObject)
{
TargetObject = avaloniaObject;
}
else if (serviceProvider.GetService(typeof(IRootObjectProvider)) is IRootObjectProvider root)
{
TargetObject = (AvaloniaObject)root.RootObject;
}
if (TargetObject is not null)
{
string? targetName = target.TargetProperty as string;
TargetInvoke = target.TargetProperty;
OnAttached(serviceProvider);
EventInfo? eventInfo = target.TargetProperty as EventInfo ?? (targetName is not null ? TargetObject.GetType().GetEvent(targetName) : null);
MethodInfo? methodInfo = eventInfo is not null ? null : target.TargetProperty as MethodInfo ?? (targetName is not null ? TargetObject.GetType().GetMethod(targetName) : null);
MethodInfo invokeMethod = GetType().GetMethod("Invoke", BindingFlags.Instance | BindingFlags.Public)!;
if (invokeMethod is null)
{
return this;
}
if (eventInfo is not null)
{
return Delegate.CreateDelegate(eventInfo.EventHandlerType!, this, invokeMethod);
}
if (methodInfo is not null)
{
if (methodInfo.GetParameters() is ParameterInfo[] methodParameters && methodParameters is { Length: 2 })
{
return Delegate.CreateDelegate(methodParameters[1].ParameterType, this, invokeMethod);
}
}
}
}
return null;
}
protected virtual void OnAttached(IServiceProvider serviceProvider)
{
}
protected virtual void OnInvoked(object sender, EventArgs args)
{
}
}
+4
View File
@@ -0,0 +1,4 @@
using Avalonia.Metadata;
[assembly: XmlnsDefinition("https://github.com/avaloniaui", "FluentAvalonia.UI.Controls")]
[assembly: XmlnsDefinition("https://github.com/avaloniaui", "TheXamlGuy.UI.Avalonia")]