首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Avalonia按钮单击事件不起作用

Avalonia按钮单击事件不起作用
EN

Stack Overflow用户
提问于 2020-05-16 23:00:01
回答 4查看 5K关注 0票数 5

我有一个简单的Avalonia形式:

代码语言:javascript
复制
<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="AvaloniaExperiment.MainWindow"
        Title="AvaloniaExperiment">
  <StackPanel>
    <TextBlock>Welcome to Avalonia!</TextBlock>
    <Button Name="btn" Click="btn_OnClick">Fred!</Button>
  </StackPanel>
</Window>

以及后面代码中的一个方法(我希望这样做,直到我熟悉Avalonia,然后可能会尝试MVVM):

代码语言:javascript
复制
private void btn_OnClick()
{
    btn.Text = "Ginger";
}

但是,我得到了以下编译错误:

名称btn不存在于当前上下文中(在后面的代码中)

无法为参数Avalonia.Controls:Avalonia.Controls.Button System.Private.CoreLib:System.String类型的属性找到合适的设置器或加法器,可用的设置器参数列表为: System.EventHandler`1[Avalonia.Interactivity.RoutedEventArgs, Avalonia.Interactivity, Version=0.9.0.0, Culture=neutral, PublicKeyToken=null]

无法为参数Avalonia.Controls:Avalonia.Controls.Button System.Runtime:System.String类型的属性命令找到合适的设置器或加法器,可用的设置器参数列表为: Avalonia.UnsetValueType Avalonia.Data.IBinding System.Windows.Input.ICommand (也在Avalonia.UnsetValueType Avalonia.Data.IBinding System.Windows.Input.ICommand中)

在连接这个事件处理程序时,我会做什么错事呢?

EN

回答 4

Stack Overflow用户

发布于 2021-11-09 00:28:47

发件人是您刚才单击的按钮,所以键入发送方到button,并将其内容属性(而不是文本)设置为您想要的任何内容。

代码语言:javascript
复制
public void btn_OnClick( object? sender, RoutedEventArgs args )
{
    ( sender as Button )!.Content = "Ginger";
}

不需要在树或其他任何地方查找它,这样您就可以为所有按钮重用相同的代码,例如,取决于它是哪个按钮,设置不同的名称或样式,或者其他属性等等。

更先进:

代码语言:javascript
复制
public void btn_OnClick( object? sender, RoutedEventArgs args )
{
    var button = ( sender as Button )!;
    switch ( button.Name )
    {
        case "btn":
        {
            button.Content = "Ginger";
        }
        break;
        case "otherBtn":
        {
            button.Content = "Ale";
        }
        break;
        default:
        {
            button.Content = "No clue which Button you are!";
        }
        break;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2020-05-17 01:42:16

你试过..。

代码语言:javascript
复制
public void btn_OnClick(object sender, RoutedEventArgs e)
{
    btn.Text = "Ginger";
}
票数 1
EN

Stack Overflow用户

发布于 2020-06-18 02:50:58

您应该在父控件构造器中添加一个ControlLink,如下所示:

代码语言:javascript
复制
public class AnyParentControl
{
    Button btn; // for the class
    public AnyParentControl() // constructor
    {
        InitializeComponent(); // necessary method for Avalonia

        btn = this.Find<Button>("The Control Name on XAML File");
        btn.Click += Cbtn_Click; // event link
    }
}

秘鲁的问候:D

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61844734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档