gpt4 book ai didi

c# - 使 slider 使用现有的 IValueConverter

转载 作者:行者123 更新时间:2023-11-30 19:26:49 25 4
gpt4 key购买 nike

我有一个 slider实现 System.Windows.Controls.Slider :

class MySlider : Slider
{
public MySlider()
{
Minimum = 1;
Maximum = 1000;
}
}

我这样使用它:MySlider slider = new MySlider() { Width = 400, Name = "TheSlider"};

效果很好,但它是线性的。
我想让它非线性,因为合理的值是 1、2、10、1000(例如)。
所以我定义了一个非线性的 IValueConverter像这样:

public class LogScaleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (int)Math.Log((int)value);
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (int)Math.Exp((double)value);
}
}

问题如何让 slider 使用这个转换器

最佳答案

更新:为您提供完整的工作代码。

MainWindow.xaml

<StackPanel>
<StackPanel.Resources>
<spikes:LogScaleConverter x:Key="LogScaleConverter"/>
</StackPanel.Resources>
<TextBox x:Name="InputNumberTextBox" Width="100" Text="{Binding InputNumber, Mode=TwoWay}"/>
<Slider Width="1000"
Minimum="1"
Maximum="100"
Value="{Binding ElementName=InputNumberTextBox,Path=Text, Mode=TwoWay,Converter={StaticResource LogScaleConverter}}"/>
</StackPanel>

LogScaleConverter.cs

public class LogScaleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var stringValue = value.ToString();
if (string.IsNullOrWhiteSpace(stringValue)) return null;

var intValue = int.Parse(stringValue);
return Math.Log(intValue);
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (int)Math.Exp((double)value);
}
}

现在请注意,当您在文本框 中键入内容时,它会根据您的公式更改 slider 的值。您可以在 Convert 上放置一个断点,看看这是否是您在 slider 中真正想要的值。

我认为没有必要创建一个 MySlider 类,因为您只设置了 MinimumMaximum 属性,这已经是在实际对象本身上可用。如果您要创建自定义内容(例如定义您自己的 Dependency Properties),您应该只扩展控件。

关于c# - 使 slider 使用现有的 IValueConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20946760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com