0

我正在使用 XAML Toolkit ImageButton 控件来为按钮创建正常和按下状态。代码是:

<toolkit:ImageButton NormalStateImageSource="ms-appx:///Assets/1_off.png"
                         PressedStateImageSource="ms-appx:///Assets/1_on.png"
                         Width="500"
                         Height="200">
</toolkit:ImageButton>

我面临的问题是,假设我的形状不是矩形或正方形。例如,我有星形和箭头对象的 PNG。有没有办法根据形状设置它们的边界?如果没有,请建议处理此类情况的最佳方法。

4

1 回答 1

2

我尝试了两种选择

  1. 使用鼠标或触摸单击时 - 您会在单击之前检查指针的最后一个位置,并查看按钮中的图像在该位置是否有不透明的像素。

    • 优点:
      • 它比选项 2 更简单。
      • 你得到最准确的信息
    • 缺点:
      • 您无法判断按钮是否被鼠标、触摸、笔、键盘或旁白使用自动化点击,因此您最终可能会因为鼠标光标有点偏离而过滤掉键盘点击。您可以使用一些启发式方法,例如在单击事件之前指针移动或指针向下事件多久之前,但这有点笨拙并且可能不可靠。
  2. Path为您的图像生成矢量路径并将其作为带有 的元素放入按钮模板中Fill="Transparent",然后将任何其他不透明或可测试的模板元素(按钮、带有 Background="Transparent" 的边框等)标记为IsHitTestVisible="false"

    • 优点:
      • 不会破坏任何输入法
      • 可以相当精确
      • 对于像圆形这样的形状 -Path.Data可能非常简单,或者您甚至可以使用类似Ellipse元素的东西
    • 缺点:
      • 您需要以某种方式生成路径
      • 复杂的路径可能会对性能产生不利影响

在大多数情况下,总体上更好的解决方案是将可命中测试区域保留为矩形。原因是 - 任意形状是一个挑剔且不可靠的命中测试目标,因此它使单击按钮更加困难。使用默认的矩形边框或最多 - 椭圆形状更简单,更实用。

于 2015-08-19T19:30:03.677 回答