C # / AvaloniaUI - Нажмите кнопку и измените текст - PullRequest
0 голосов
/ 26 января 2020

Я очень плохо знаком с 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 Я не знаю, как выбрать TextBlock с именем = "TestBlock" и измените текст на "Hello World".

Не могли бы вы помочь мне в этом?

1 Ответ

2 голосов
/ 27 января 2020

Существует два подхода: рекомендуемый и простой.

Рекомендуется: использовать шаблон MVVM. Создайте модель представления с помощью команд ButtonTextProperty и RunTheThing, введите команду для изменения свойства, назначьте эту модель для DataContext и свяжите текст и команду вашей кнопки для просмотра свойств модели. Подход MVVM в основном такой же, как и в WPF, поэтому вы можете использовать документацию и учебные материалы оттуда (это относится к большей части Avalonia, BTW). Например, вот хороший (не реклама, 4-я ссылка от Google).

Простой (иначе как winforms-way): добавьте x:Name="MyButton" к своей кнопке и используйте this.FindControl<Button>("MyButton") после звонка AvaloniaXamlLoader.Load(this);. Это даст вам ссылку Button, которой вы можете манипулировать из кода. Вместо использования команд вы можете просто подписаться на обработчик кликов непосредственно из codebehind, добавить public void MyButton_OnClick(object sender, RoutedEventArgs args){} в свой класс MainWindow и добавить заменить Command и CommandParameter на Click="MyButton_OnClick". Таким образом, нажатие кнопки активирует ваш обработчик событий.

Обратите внимание, что второй подход плохо масштабируется с размером приложения и страдает от сложности кода при обработке списков.

...