C# 如何根据滑块值动态更改标签?
我正在编写一个成绩计算器,目前我有一个滑块,旁边有一个文本框,显示滑块的当前值:C# 如何根据滑块值动态更改标签?,c#,wpf,C#,Wpf,我正在编写一个成绩计算器,目前我有一个滑块,旁边有一个文本框,显示滑块的当前值: <Slider Name="gradeSlider" Grid.Row="3" Grid.Column="2" VerticalAlignment="Center" Minimum="40" Maximum="100" IsSnapToTickEnabled=
<Slider Name="gradeSlider"
Grid.Row="3"
Grid.Column="2"
VerticalAlignment="Center"
Minimum="40"
Maximum="100"
IsSnapToTickEnabled="True"
TickFrequency="5"
TickPlacement="BottomRight"/>
<TextBox Name="targetGrade"
Grid.Row="3"
Grid.Column="3"
Width="30"
Height="23"
Text="{Binding ElementName=gradeSlider, Path=Value}"
TextAlignment="Center"/>
然而,我很难包括一个标签,它将根据滑块的值范围显示不同的等级分类。我本以为我可以创建标签:
<Label Name="gradeClass"
Grid.Row="2"
Grid.Column="2"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"/>
然后使用代码:
string gradeText;
if (gradeSlider.Value >= 40 && gradeSlider.Value < 50)
{
gradeText = "Pass";
gradeClass.Content = gradeText;
}
else if (gradeSlider.Value >= 50 && gradeSlider.Value < 60)
{
gradeText = "2:2";
gradeClass.Content = gradeText;
}
else
{
gradeText = "so on...";
gradeClass.Content = gradeText;
}
字符串文本;
如果(gradeSlider.Value>=40&&gradeSlider.Value<50)
{
gradeText=“通过”;
gradeClass.Content=gradeText;
}
否则如果(gradeSlider.Value>=50&&gradeSlider.Value<60)
{
gradeText=“2:2”;
gradeClass.Content=gradeText;
}
其他的
{
gradeText=“如此…”;
gradeClass.Content=gradeText;
}
但无论滑块值如何,标签都保持为“通过”。有人能告诉我哪里出了问题吗?我尝试在标签xaml上使用
Content=“{Binding Source=gradeText}”
,并删除代码中的gradeClass.Content
,但它抱怨gradeText已声明但从未使用。非常感谢任何能提供帮助的人。您可以使用标签上的绑定(如TextBox)和转换器类将滑块值转换为所需文本
public class SliderToTextConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
// Do the conversion from Slider.Value(int) to Text
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return null;
}
}
“正确”的方法是将它们都绑定到ViewModel上的“Grade”属性,并添加一个用于将数值属性转换为标签上所需的文本值的属性。最简单的方法是将标签内容绑定到Slider的值,并添加一个转换器,如下所示:
<Label Name="gradeClass"
Grid.Row="2"
Grid.Column="2"
Text="{Binding ElementName=gradeSlider, Path=Value, Converter={StaticResource SliderValueToTextConverter}}"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"/>
定义转换器有几种方法。例如,您可以在主体元素资源中定义它,假设您将所有这些控件放置在窗口中,然后:
<Window.Resources>
<convertors:SliderValueToTextConverter x:Key="SliderValueToTextConverter" />
</Window.Resources>
converter是一个实现IValueConverter接口的类。
关于转换器的好文章:
,
但正如Yaur sad所说,“真正”的方法是使用MVVM模式,而不是在控件之间绑定,而是将控件绑定到ViewModel属性,然后使用转换器
更新:关于转换器的一个重要线索: