1

我对 AvaloniaUI 很陌生。

单击按钮时,我真的很难更改文本。这是我的代码:

  <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"
          mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
          x:Class="ReadyForWar_Launcher.MainWindow"
          Title="ReadyForWar_Launcher">
    <StackPanel>
      <TextBlock Name="TestBlock">Show my text here!</TextBlock>
      <Button Command="{Binding RunTheThing}" CommandParameter="Hello World">Change the Text!</Button>
    </StackPanel>
  </Window>

这是我的 MainWindow.xaml.cs:

using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;

namespace ReadyForWar_Launcher
{
    public class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
#if DEBUG
            this.AttachDevTools();
#endif
        }

        private void InitializeComponent()
        {
            AvaloniaXamlLoader.Load(this);
        }

        public void RunTheThing()
        {

        }
    }
}

在里面RunTheThing我不知道如何选择 Name="TestBlock" 的 TextBlock 并将文本更改为“Hello World”。

你能帮我解决这个问题吗?

4

1 回答 1

2

有两种方法,一种是推荐的,一种是直接的。

推荐:使用 MVVM 模式。ButtonTextProperty使用和命令创建一个视图模型RunTheThing,发出命令来更改属性,将该模型分配给DataContext并将您的按钮文本和命令绑定到视图模型属性。MVVM 方法与 WPF 中的方法基本相同,因此您可以从那里使用文档和教程(这适用于大多数 Avalonia,顺便说一句)。例如,这是一个很好的(不是广告,来自 google 的第 4 个链接)。

直截了当(又名 winforms-way):添加x:Name="MyButton"到您的按钮并this.FindControl<Button>("MyButton")在调用AvaloniaXamlLoader.Load(this);. 这将为您提供Button可以从代码中操作的参考。您可以直接从代码隐藏订阅单击处理程序,而不是使用命令,添加public void MyButton_OnClick(object sender, RoutedEventArgs args){}到您的MainWindow类并添加替换命令和命令参数为Click="MyButton_OnClick"。这样按钮单击将触发您的事件处理程序。

请注意,第二种方法不能很好地适应应用程序的大小,并且在处理列表时会受到代码复杂性的影响。

于 2020-01-27T05:12:59.680 回答