【问题标题】:Slider's behaviour depending on minimum-maximum range滑块的行为取决于最小-最大范围
【发布时间】:2014-07-13 08:40:19
【问题描述】:

我正在使用 Windows Phone 8.1 Runtime,但遇到了奇怪的问题。

让我们定义两个几乎相同的Silders

<Slider Header="Values 0.1-0.9" Grid.Row="0" HorizontalAlignment="Stretch" TickFrequency="0.05" TickPlacement="Inline"
        Minimum="0.1" Maximum="0.9" Value="0.2"/>
<Slider Header="Values 1.0-9.0" Grid.Row="1" HorizontalAlignment="Stretch" TickFrequency="0.5"  TickPlacement="Inline"
        Minimum="1" Maximum="9" Value="2"/>

如您所见,第二个 滑块 与第一个滑块的区别仅在于其范围(10 次)。但事实证明,第一个工作不正常(见附图) - 该值似乎从 0 开始(认为你不能将它设置为低于设置的最小值 0.1 - 你总是从 0 开始很少有水平轨迹)。

这似乎是一个小错误(可能在某处四舍五入最小值?),但也许我错过了一些东西。有没有办法让它使用小于 1.0 的值(不使用转换器)?

【问题讨论】:

    标签: c# xaml windows-runtime windows-phone-8.1


    【解决方案1】:

    你在那里发现了一个有趣的问题。为问题 +1。

    我检查了它,当最小值和最大值不是整数时,内置滑块似乎真的不能很好地工作。我可以想出 3 种方法来解决这个问题。

    1.将包装器属性添加到 VM 类(我假设您要绑定值,因为您提到了转换器)

    我们的想法是向您绑定的 VM 添加另一个属性,如下所示:

    //Lets assume that the original property that ranges from 0.1 to 0.9 is called MyProp
    public double MyPropBinding {
        get {
            return this.MyProp * 10.0;
        }
        set {
            this.MyProp = value / 10.0;
        }
    }
    

    这基本上很简单,不需要额外的类,这是我使用转换器的最大问题。不过,如果您有 10 个 VM 类需要这样做,那可能并不完美。

    2。使用转换器

    是的,我知道您要求提供不带转换器的选项,但我想说这实际上是一个非常好的选项。不是很酷,因为您需要另一个课程和更长的绑定文本,但不需要任何研究。而且时间很宝贵!您基本上可以在几分钟内以一种非 hacky 的方式解决您的问题。

    3.固定滑块(一种或另一种方式)

    我认为您可以扩展 Slider 并为其添加一些属性,这将解决它。例如:Scale(在您的情况下为 10)和 ValueScaled,即 Value / Scale。因此,您将使用自定义 Slider,Min 和 Max 为 1 和 9,Scale 为 10,您将拥有 ValueScaled,这将是您真正想要的值。

    P.S.我没有进行太多研究,因为我认为其中至少一个应该适合您(以及其他所有人)。那里可能有更酷的解决方案。 :)

    【讨论】:

    • 感谢您的回答。这似乎是一个错误,所以我们必须等待更新。没什么大不了的,IMO Converter是最简单的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多