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