例子也绑定了自定义类,系统类同理,目前Avalonia不支持绑定结构。
BindToFont.axaml代码
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local ="using:AvaloniaUI" xmlns:sys="clr-namespace:System;assembly=mscorlib" Height="300" Width="300" x:Class="AvaloniaUI.BindToFont" Title="BindToFont"> <!--https://docs.avaloniaui.net/docs/concepts/markupextensions--> <Window.Resources> <FontFamily x:Key="CustomFont">Calibri</FontFamily> </Window.Resources> <StackPanel Margin="10" > <TextBlock Margin="5" Text="{x:Static Member=local:BindToFont.MyGuid}"></TextBlock> <TextBox Name="input" >Hello Avalonia</TextBox> <TextBlock Margin="5" Text="{local:BindableMe {Binding #input.Text}}"></TextBlock> <TextBlock Margin="5" Text="{Binding Source={StaticResource CustomFont}, Path=Name}"></TextBlock> </StackPanel> </Window>
BindToFont.axaml.cs代码
using Avalonia;
using Avalonia.Controls;
using Avalonia.Data;
using Avalonia.Data.Converters;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using CommunityToolkit.Mvvm.ComponentModel;
using System;
using System.Linq;
namespace AvaloniaUI;
public class BindableMe
{
private readonly BindingBase first;
public BindableMe(BindingBase first)
{
this.first = first;
}
public object ProvideValue(IServiceProvider serviceProvider)
{
/*
var target = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget))!;
var targetProperty = target.TargetProperty as AvaloniaProperty;
var targetType = targetProperty?.PropertyType;
*/
var mb = new MultiBinding()
{
Bindings = new[] { first },
Converter = new FuncMultiValueConverter<string, string>(s => $"Total Bindings: {s.Count()}, Text: " + s.ElementAt(0))
};
return mb;
}
}
public partial class BindToFont : Window
{
public static string? MyGuid
{
get; set;
} = Guid.NewGuid().ToString();
public BindToFont()
{
InitializeComponent();
}
}
运行效果

浙公网安备 33010602011771号