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

iAt*_*_it 5 .net c# wpf visual-studio

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

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

如何将滑块的Value转换为转换器中的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}" />
Run Code Online (Sandbox Code Playgroud)

这是我的stringconverter班级

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

key*_*rdP 17

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

<TextBlock Text="{Binding ElementName=mySlider, Path=Value, StringFormat={}{0:#}}"/>
Run Code Online (Sandbox Code Playgroud)

如果你想保留的,而不是使用一个TextBlock标签,你可以使用ContentStringFormat,而不是作为Content在需要object的类型.

<Label Content="{Binding ElementName=mySlider, Path=Value}" ContentStringFormat="{}{0:#}" />
Run Code Online (Sandbox Code Playgroud)

  • +1,ContentStringFormat ?,我今天学到了新东西:) (4认同)

LPL*_*LPL 4

回答问题:抛出错误的原因是

Converter=stringconverter
Run Code Online (Sandbox Code Playgroud)

它一定要是

Converter={StaticResource stringconverter}
Run Code Online (Sandbox Code Playgroud)

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

return ((double)value).ToString("0");
Run Code Online (Sandbox Code Playgroud)

或者

return Math.Round((double)value);
Run Code Online (Sandbox Code Playgroud)