6

我有一个简单的滑块和一个普通的标签。标签的内容绑定到滑块的值并且它工作正常 - 当您移动滑块时,标签的内容会发生变化,例如 23.3983928394 、 50.234234234 等等

我想将它四舍五入为 int 值。1,2,10....100 . 但是当我尝试使用转换器时,我得到 “ivalueconverter 不支持从字符串转换”。

如何在转换器中将滑块的值转换为 int?

谢谢

这是我的XAML

<Grid.Resources>
        <local:MyConvertor x:Key="stringconverter" />
    </Grid.Resources>
<Slider x:Name="mySlider" Height="50" Width="276" Maximum="100"/>
<Label Content="{Binding ElementName=mySlider, Path=Value, Converter=stringconverter}" />

这是我的stringconverter

public class MyConvertor: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        //How to convert string to int?
    }
4

4 回答 4

19

您可以在此处只使用StringFormat属性,而不是创建转换器。#由于指定的格式,双精度值将四舍五入为 int 。

<TextBlock Text="{Binding ElementName=mySlider, Path=Value, StringFormat={}{0:#}}"/>

如果您想保留标签,而不是使用 TextBlock,您可以使用ContentStringFormatContent来代替object类型。

<Label Content="{Binding ElementName=mySlider, Path=Value}" ContentStringFormat="{}{0:#}" />
于 2013-07-11T22:06:26.513 回答
3

回答这个问题:错误是因为

Converter=stringconverter

它一定要是

Converter={StaticResource stringconverter}

在您的转换器中,您不是将字符串转换为 int,而是将double ( Slider.Value)转换为对象( Label.Content),它也可以是字符串。例如

return ((double)value).ToString("0");

或者

return Math.Round((double)value);
于 2013-07-11T22:49:08.560 回答
2

您可以使用标签的 ContentStringFormat 属性

<Label Content="{Binding ElementName=Slider, Path=Value}" 
   ContentStringFormat="{}{0:N0}" />
于 2015-08-27T17:28:39.077 回答
1

检查 Slider 的 IsSnapToTickEnabled 属性

于 2017-08-23T20:50:20.690 回答