2011-11-17 50 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?

相關問題