【问题标题】:Opacity values not exact不透明度值不准确
【发布时间】:2019-05-19 16:00:19
【问题描述】:

0我正在开发某种按钮(实际上它们是图像),当它们被禁用(而不是启用 = false)时,它们的不透明度值为 0.1。因此,通过对点击事件中的不透明度进行简单检查,我可以知道它是启用还是禁用。

但是,当我为不透明度 (0.1) 设置禁用值并调试并检查执行时,我有一个奇怪的行为:不透明度值不完全是 0.1,而是稍大一些。所以,当我检查 if ( btnLocateMeControl.Opacity == 0.1 ) 时总是返回 false,因为它不准确。

这里是调试时的截图:

知道为什么会发生吗?任何优雅的解决方案不是检查不透明度是否不在 0.09 - 0.11 之间?

谢谢!

【问题讨论】:

  • 因为你在比较浮点数,这总是充满危险:stackoverflow.com/questions/3874627/…
  • 为什么不直接实现Enabled 属性,您可以在其中更改设置器中的不透明度?然后你有一个不错的、可靠的bool 来传递状态。
  • 0.1 不能完全表示为浮点数
  • @Rufus L 从没想过这一点。我将尝试使用一个简单的函数来检查给定控件是否在安全值之间具有不透明度。谢谢!
  • @RufusL 你可以写一个答案,这样问题就可以结束了:-)

标签: c# uwp opacity


【解决方案1】:

这是我对这个问题的“解决方案”。不是最优雅的,但它有效且易于实现。

//if (btnGPSControl.Opacity == 0.1) return; // Old problematic part
if (!IsEnabledControl(btnGPSControl)) return;  // New code

以及检查不透明度值的功能:

    private bool IsEnabledControl(Image btnControl)
    {
        return !(0.099 < btnControl.Opacity && btnControl.Opacity < 0.101);
    }

【讨论】:

    猜你喜欢
    • 2016-12-02
    • 2014-01-05
    • 2013-08-28
    • 2016-11-02
    • 2012-03-05
    • 2013-06-05
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    相关资源
    最近更新 更多