WinRT - 用于透明PNG的{ImageButton

时间:2015-08-19 15:35:21

标签: xaml windows-runtime winrt-xaml winrt-xaml-toolkit

我正在使用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。有没有办法设置与形状相对应的边界?如果没有,请建议处理此类情况的最佳方法。

1 个答案:

答案 0 :(得分:2)

我尝试过两种选择

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

    • 优点:
      • 比选项2简单。
      • 您可以获得最准确的信息
    • 缺点:
      • 您无法通过鼠标,触控,笔,键盘或使用自动化的叙述者来判断按钮是否被点击,因此您最终可能因为鼠标光标有点过滤而过滤掉键盘点击。您可以使用一些启发式方法,例如指针移动或指针向下事件多久以前的点击事件,但它有点hacky并且可能不可靠。
  2. 为您的图片生成一个矢量路径,并将其作为带有Path的{​​{1}}元素放入按钮模板中,然后标记任何其他非透明或可测试的模板元素(按钮,边框与背景=&#34;透明&#34;等)为Fill="Transparent"

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