Avalonia中Canvas绑定PointerPressed事件报错:无法找到合适设置器
问题解决:Avalonia中XAML事件绑定报错无法找到合适的设置器
问题原因
你遇到的错误是因为Avalonia的XAML事件绑定语法和WPF不同,直接在事件属性中写方法名(如PointerPressed="AddShape")会被XAML解析器当成普通字符串值,而事件需要的是EventHandler<PointerPressedEventArgs>类型的委托,因此出现类型不匹配的错误。
解决方案
有两种可行的解决方式:
方式1:修正XAML中的事件绑定语法
在Avalonia中,需要使用{Event}标记扩展来指定事件处理方法,修改后的XAML代码如下:
<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="TestCanvas.MainWindow" Title="TestCanvas"> <Canvas PointerPressed="{Event AddShape}"/> </Window>
方式2:在代码后台手动绑定事件
如果更习惯代码绑定的方式,可以给Canvas添加x:Name属性,然后在构造函数中手动挂载事件处理程序:
修改后的XAML:
<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="TestCanvas.MainWindow" Title="TestCanvas"> <Canvas x:Name="DrawCanvas"/> </Window>
修改后的C#代码:
using Avalonia.Controls; using Avalonia.Input; namespace TestCanvas { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DrawCanvas.PointerPressed += AddShape; } public void AddShape(object sender, PointerPressedEventArgs e) { // 你的事件逻辑 } } }
两种方式都可以解决你遇到的按钮点击事件、Canvas指针事件的类似报错问题,选择适合自己的写法即可。
内容的提问来源于stack exchange,提问作者Turkeyplague
相关产品推荐
相关产品推荐

