2013-05-13 57 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,则可以相应地修改这些值。

希望这会有所帮助!