MVVM开发的优势就是绑定,所以大家要好好运用绑定。我已经帮大家写好了AvaloniaObject的扩展用于解除和判断绑定。
https://www.cnblogs.com/dalgleish/p/19022485
ElementToElementBinding.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" Height="300" Width="300" x:Class="AvaloniaUI.ElementToElementBinding" Title="ElementToElementBinding"> <StackPanel Margin="5"> <Slider Name="sliderFontSize" Margin="3" Minimum="1" Maximum="40" Value="10" TickFrequency="1" IsSnapToTickEnabled="True" TickPlacement="TopLeft"></Slider> <TextBlock Margin="10" Name="lblSampleText" FontSize="{Binding #sliderFontSize.Value}" Text="Simple Text"> </TextBlock> <StackPanel Orientation="Horizontal" > <Button Margin="5" Padding="3" Click="cmd_SetSmall">Set to Small</Button> <Button Margin="5" Padding="3" Click="cmd_SetNormal">Set to Normal</Button> <Button Margin="5" Padding="3" Click="cmd_SetLarge">Set to Large</Button> </StackPanel> <Button Margin="5" Padding="3" HorizontalAlignment="Left" Click="cmd_BoundObject">Set Bound Object (Dynamically)</Button> </StackPanel> </Window>
ElementToElementBinding.axaml.cs代码
using Avalonia;
using Avalonia.Controls;
using Avalonia.Data;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using Shares.Avalonia;
using System;
using System.Reactive.Linq;
namespace AvaloniaUI;
public partial class ElementToElementBinding : Window
{
public ElementToElementBinding()
{
InitializeComponent();
}
private void cmd_SetSmall(object? sender, RoutedEventArgs e)
{
sliderFontSize.Value = 2;
}
private void cmd_SetNormal(object? sender, RoutedEventArgs e)
{
sliderFontSize.Value = this.FontSize;
}
private void cmd_SetLarge(object? sender, RoutedEventArgs e)
{
//xaml中默认是OneWay,Slider -> lblSampleText
lblSampleText.FontSize = 30;
}
private void cmd_BoundObject(object? sender, RoutedEventArgs e)
{
//lblSampleText -> Slider,单向。从而补全双向
if (!sliderFontSize.IsBinding(Slider.ValueProperty))
sliderFontSize[!Slider.ValueProperty] = lblSampleText[!TextBlock.FontSizeProperty];
else
sliderFontSize.RemoveBinding(Slider.ValueProperty);
}
}
运行效果

浙公网安备 33010602011771号