2013-05-13 39 views
0

我想通過XAML上的{綁定}將滑塊控件設置爲文本塊的文本屬性的值。滑塊控件和文本塊控件交互 - Metro應用

<Slider ValueChanged="slider_ValueChanged_1" Value= "{Binding ElementName=ComponentTextBlockValue,Path=Text}" StepFrequency="25"/> 

我需要一個轉換器來設置滑塊的值。綁定似乎有時工作,但有時它不起作用。有時,滑塊不會將其值設置爲文本塊值。

回答

0

由於您直接綁定Slider的值而沒有使用值轉換器,所以我懷疑當文本不是數字或超出範圍時,綁定被破壞。

您可以通過創建一個值轉換器來防止錯誤值被綁定,所以綁定將始終有效。

下面是一些例子:

public class TextToSliderValueConverter : IValueConverter 
{ 
    public double MaximumSliderValue { get; set; } 
    public double MinimumSliderValue { get; set; } 

    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     double sliderValue; 

     if (double.TryParse(value as string, out sliderValue) 
      && sliderValue <= MaximumSliderValue && sliderValue >= MinimumSliderValue) 
     { 
      return sliderValue; 
     } 
     else 
     { 
      return 0.0; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

這裏是XAML:

<Page 
    x:Class="stovfSliderTextBox.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:stovfSliderTextBox" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d"> 

    <Page.Resources> 
     <local:TextToSliderValueConverter x:Key="txtToSliderValue" MaximumSliderValue="100" MinimumSliderValue="0"/> 
    </Page.Resources> 
    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> 
     <StackPanel> 
      <Slider Value= "{Binding ElementName=ComponentTextBlockValue,Path=Text, Converter={StaticResource txtToSliderValue}, ConverterParameter=slider}" StepFrequency="25"/> 
      <TextBox x:Name="ComponentTextBlockValue" Width="50"/> 
     </StackPanel> 
    </Grid> 
</Page> 

的TextToSliderValueConverter確保滑塊總是會得到有效的價值。如果您不使用默認的Slider.Maximum或Slider.Minimum,則可以相應地修改這些值。

希望這會有所幫助!