输入范围的 Blazor 数据绑定似乎不适用于浮点步长
Blazor data-binding of input range doesn't seem to work properly with floating point step
我有一个滑块,用户应该使用它来设置百分比阈值。
以下代码片段工作正常:
<span class="label label-default">Detection Threshold: @_objectDetectionThreshold %</span>
<input type="range" class="slider" min="0.0" step="1" max="100.0"
@bind-value="_objectDetectionThreshold" @bind-value:event="oninput"
data-toggle="tooltip" title=@_objectDetectionThreshold data-placement="top" />
_objectDetectionThreshold
只是代码中的私有字段:
private float _objectDetectionThreshold = 80.0f;
仅通过设置 step="0.1"
或任何浮点值来更改上面的代码会导致一些问题,其中值更新非常缓慢,并且滑块将在拖动时开始跳动。
这里的问题是什么以及如何避免?
多亏了Jesse Good
的评论,我才明白是span元素的显示模式造成的,应该是block
而不是inline.
因此你可以使用:
<span style="display: block">Detection Threshold: @_objectDetectionThreshold %</span>
或者 div 元素,默认情况下是块元素
现在你的悲惨元素可以正常工作了。
问题出在渲染域,而不是转换。像差的原因很清楚,解决方案也很清楚,但是需要一些,也许需要很多思考才能获得完整的图像,为什么渲染会那样扭曲...
=======================这是我的评论================== ===
您提供的所有代码片段都证明了我的主张,您确实同意我的观点,不仅是代码,还有文字:exactly as you described
但是,这已经是我第四次告诉您了: 运行 您在 您自己的 PC 上的代码 省略了 style="display: block"
的跨度,但 CultureInfo englishCultureInfo = new CultureInfo("en-US");
...好的 运行 这个代码,告诉我它是否适合你:
<span class="label label-default">
Detection Threshold: @_objectDetectionThreshold %
</span>
<input type="range" class="slider my-2" min="0.0" step="0.1" max="100.0"
@bind-value="_objectDetectionThreshold" @bind-value:event="oninput" @bind-value:culture="@System.Globalization.CultureInfo.InvariantCulture"
data-toggle="tooltip" title=@_objectDetectionThreshold data-placement="top" />
如果问题是转换问题,此代码 supposed
可以为您工作,因为它配置:
@bind-value:culture="@System.Globalization.CultureInfo.InvariantCulture"
对吧?如果没有,那是因为代码片段使用了内联跨度元素。
注意:并非所有死于 Covid-19 的老人都死于这种疾病,或者他们的死亡与这种疾病有关。并非所有对软件程序进行的代码修改都是正确的解决方案,尽管它们的引入会导致问题消失。
我终于得到了正确答案:
问题是一个简单的文化信息问题。我的 Windows 安装设置为德语,其中十进制分隔符是 ,
而不是 .
.
将代码更改为
<input type="range" class="slider" min="0.0" step="0.1" max="100.0"
@bind-value="_objectDetectionThreshold" @bind-value:event="oninput" @bind-value:culture=@englishCultureInfo
data-toggle="tooltip" title=@_objectDetectionThreshold data-placement="top" />
@code{
private float _objectDetectionThreshold = 80.0f;
CultureInfo englishCultureInfo = new CultureInfo("en-US");
}
解决问题。
或者可以在项目文件中全局处理全球化 (see relevant docs):
<PropertyGroup>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
这也解决了问题。
@enet,因为我确定您的回答提供了一个需要考虑的重要部分,您能否将此信息添加到您的回答中,以便我们得到一个合并的答案。然后我会把它标记为正确的。
我有一个滑块,用户应该使用它来设置百分比阈值。 以下代码片段工作正常:
<span class="label label-default">Detection Threshold: @_objectDetectionThreshold %</span>
<input type="range" class="slider" min="0.0" step="1" max="100.0"
@bind-value="_objectDetectionThreshold" @bind-value:event="oninput"
data-toggle="tooltip" title=@_objectDetectionThreshold data-placement="top" />
_objectDetectionThreshold
只是代码中的私有字段:
private float _objectDetectionThreshold = 80.0f;
仅通过设置 step="0.1"
或任何浮点值来更改上面的代码会导致一些问题,其中值更新非常缓慢,并且滑块将在拖动时开始跳动。
这里的问题是什么以及如何避免?
多亏了Jesse Good
的评论,我才明白是span元素的显示模式造成的,应该是block
而不是inline.
因此你可以使用:
<span style="display: block">Detection Threshold: @_objectDetectionThreshold %</span>
或者 div 元素,默认情况下是块元素
现在你的悲惨元素可以正常工作了。
问题出在渲染域,而不是转换。像差的原因很清楚,解决方案也很清楚,但是需要一些,也许需要很多思考才能获得完整的图像,为什么渲染会那样扭曲...
=======================这是我的评论================== ===
您提供的所有代码片段都证明了我的主张,您确实同意我的观点,不仅是代码,还有文字:exactly as you described
但是,这已经是我第四次告诉您了: 运行 您在 您自己的 PC 上的代码 省略了 style="display: block"
的跨度,但 CultureInfo englishCultureInfo = new CultureInfo("en-US");
...好的 运行 这个代码,告诉我它是否适合你:
<span class="label label-default">
Detection Threshold: @_objectDetectionThreshold %
</span>
<input type="range" class="slider my-2" min="0.0" step="0.1" max="100.0"
@bind-value="_objectDetectionThreshold" @bind-value:event="oninput" @bind-value:culture="@System.Globalization.CultureInfo.InvariantCulture"
data-toggle="tooltip" title=@_objectDetectionThreshold data-placement="top" />
如果问题是转换问题,此代码 supposed
可以为您工作,因为它配置:
@bind-value:culture="@System.Globalization.CultureInfo.InvariantCulture"
对吧?如果没有,那是因为代码片段使用了内联跨度元素。
注意:并非所有死于 Covid-19 的老人都死于这种疾病,或者他们的死亡与这种疾病有关。并非所有对软件程序进行的代码修改都是正确的解决方案,尽管它们的引入会导致问题消失。
我终于得到了正确答案:
问题是一个简单的文化信息问题。我的 Windows 安装设置为德语,其中十进制分隔符是 ,
而不是 .
.
将代码更改为
<input type="range" class="slider" min="0.0" step="0.1" max="100.0"
@bind-value="_objectDetectionThreshold" @bind-value:event="oninput" @bind-value:culture=@englishCultureInfo
data-toggle="tooltip" title=@_objectDetectionThreshold data-placement="top" />
@code{
private float _objectDetectionThreshold = 80.0f;
CultureInfo englishCultureInfo = new CultureInfo("en-US");
}
解决问题。
或者可以在项目文件中全局处理全球化 (see relevant docs):
<PropertyGroup>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
这也解决了问题。
@enet,因为我确定您的回答提供了一个需要考虑的重要部分,您能否将此信息添加到您的回答中,以便我们得到一个合并的答案。然后我会把它标记为正确的。