Xamarin WPF项目中ImageButton的Pressed事件无法触发如何解决?
解决方案
你遇到的是Xamarin.Forms 5.0版本WPF平台ImageButton的已知适配缺陷,可通过自定义渲染器直接修复,步骤如下:
步骤1:在WPF项目中添加自定义ImageButton渲染器
using Xamarin.Forms; using Xamarin.Forms.Platform.WPF; using System.Windows.Input; // 替换为你的共享项目命名空间 using SharedProjectNamespace; using WpfControl = System.Windows.Controls.Button; // 替换为你的WPF项目命名空间 [assembly: ExportRenderer(typeof(ImageButton), typeof(WpfProjectNamespace.CustomImageButtonRenderer))] namespace WpfProjectNamespace { public class CustomImageButtonRenderer : ImageButtonRenderer { protected override void OnElementChanged(ElementChangedEventArgs<ImageButton> e) { base.OnElementChanged(e); if (Control != null) { Control.PreviewMouseDown -= OnPreviewMouseDown; Control.PreviewMouseDown += OnPreviewMouseDown; } } private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed && Element != null) { // 手动触发Xamarin.Forms层面的Pressed事件 Element.SendPressed(); // 若需要同步修复Pressed视觉状态,取消注释下一行 // VisualStateManager.GoToState(Element, "Pressed"); } } protected override void Dispose(bool disposing) { if (disposing && Control != null) { Control.PreviewMouseDown -= OnPreviewMouseDown; } base.Dispose(disposing); } } }
步骤2:替换命名空间
将代码中两处占位命名空间替换为项目实际值:
SharedProjectNamespace替换为Xamarin共享项目的命名空间WpfProjectNamespace替换为WPF项目的命名空间
验证效果
重新编译运行WPF项目,按下ImageButton时Test_Pressed方法即可正常触发,和Android端表现完全一致,原有的Released事件不受任何影响。
内容的提问来源于stack exchange,提问作者123iamking
相关产品推荐
相关产品推荐

