2011-11-17 41 views
1

我正在写一个档次的计算器,我现在有在它旁边的文本框一个滑块,显示滑块的当前值:我怎么能动态地根据滑块值一个标签的变化?

<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; 
     } 

但标签只是停留为“合格”无论滑块值。有人可以告诉我我要去哪里吗?我试图在XAML标记使用Content = "{Binding Source = gradeText}"并在代码去除gradeClass.Content的,但抱怨gradeText宣布,但从未使用过。非常感谢任何能够帮助的人。

回答

2

您可以使用像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; 
    } 
} 
2

“正确”的方式做,这是他们两个绑定到你的视图模型A“级”属性,并添加一个ValueConverter到数字转换属性到标签所需的文本值。

2

Simpliest方式是标签内容结合到滑块的值,并添加转换器,这样的事情:

<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> 

器和转换器是一个类,它实现的IValueConverter接口。 有关转换好文章: http://www.wpftutorial.net/ValueConverters.htmlhttp://www.dev102.com/2008/07/17/wpf-binding-converter-best-practices/

但作为Yaur伤心 - “真实”的方式是使用MVVM模式,而不是控件之间进行绑定,但是绑定到视图模型属性的控件,然后使用转换器。

更新:关于转换器的一大主题: Should I declare converters in App.xaml or as a per-file resource?