WPF如何使用StringConverter将滑块的值绑定到标签的内容?

时间:2013-07-11 21:51:10

标签: c# .net wpf visual-studio

我有一个简单的滑块和一个简单的标签。标签的内容绑定到滑块的值,它可以正常工作 - 移动滑块,标签的内容更改,例如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 个答案:

答案 0 :(得分:17)

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

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

如果您想保留标签,而不是使用TextBlock,则可以使用ContentStringFormat,而Content可以使用object类型。

<Label Content="{Binding ElementName=mySlider, Path=Value}" ContentStringFormat="{}{0:#}" />

答案 1 :(得分:3)

回答这个问题:由于

而引发错误
Converter=stringconverter

必须是

Converter={StaticResource stringconverter}

在您的转换器中,您不是将字符串转换为int而是将Slider.Value转换为对象Label.Content),这也可以是字符串。 e.g。

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

return Math.Round((double)value);

答案 2 :(得分:0)

您可以使用Label的ContentStringFormat属性

<Label Content="{Binding ElementName=Slider, Path=Value}" 
   ContentStringFormat="{}{0:N0}" />

答案 3 :(得分:0)

检查Slider的IsSnapToTickEnabled属性