Xaml WinRT-用于透明PNG的ImageButton

Xaml WinRT-用于透明PNG的ImageButton,xaml,windows-runtime,winrt-xaml,winrt-xaml-toolkit,Xaml,Windows Runtime,Winrt Xaml,Winrt Xaml Toolkit,我使用XAML工具包ImageButton控件来创建按钮的正常和按下状态。代码是: <toolkit:ImageButton NormalStateImageSource="ms-appx:///Assets/1_off.png" PressedStateImageSource="ms-appx:///Assets/1_on.png" Width="500"

我使用XAML工具包ImageButton控件来创建按钮的正常和按下状态。代码是:

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


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

我尝试了两种选择

  • 当用鼠标或触摸点击时,你会在点击之前检查指针的最后一个位置,看看按钮中的图像在那个位置是否有一个不透明的像素

    • 优点:
      • 它比选项2简单
      • 你能得到最准确的信息
    • 缺点:
      • 您无法判断按钮是通过鼠标、触摸、笔、键盘还是“讲述人”使用自动化单击的,因此您可能会因为鼠标光标有点偏离而过滤掉键盘单击。您可能会使用一些启发式方法,比如在单击事件之前指针移动或指针下降事件发生在多长时间之前,但这有点不可靠
  • 为图像生成矢量路径,并将其作为带有
    Fill=“Transparent”
    path
    元素放在按钮模板中,然后将任何其他非透明或可点击测试的模板元素(按钮、边框和背景=“Transparent”等)标记为
    ishitestvisible=“false”

    • 优点:
      • 不会破坏任何输入法
      • 可能相当精确
      • 对于某些形状,如圆形,
        Path.Data
        可能非常简单,或者您甚至可以使用类似于
        椭圆的元素
    • 缺点:
      • 您需要以某种方式生成路径
      • 复杂的路径可能会对性能产生不利影响
  • 总体而言,在大多数情况下,更好的解决方案是将命中可测试区域保留为矩形。原因是-任意形状是一个挑剔且不可靠的命中测试目标,因此它使单击按钮更加困难。使用默认的矩形边框,或者最多使用一个椭圆形状,会更简单、更实用