例子也绑定了自定义类,系统类同理,目前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();} }
运行效果