我正在尝试通过 XAML 上的 {Binding} 将滑块控件设置为来自文本块的文本属性的值。
<Slider ValueChanged="slider_ValueChanged_1" Value= "{Binding ElementName=ComponentTextBlockValue,Path=Text}" StepFrequency="25"/>
我需要转换器来设置滑块的值吗?绑定有时似乎有效,但有时无效。有时,滑块只是没有将其值设置为文本块值。
我正在尝试通过 XAML 上的 {Binding} 将滑块控件设置为来自文本块的文本属性的值。
<Slider ValueChanged="slider_ValueChanged_1" Value= "{Binding ElementName=ComponentTextBlockValue,Path=Text}" StepFrequency="25"/>
我需要转换器来设置滑块的值吗?绑定有时似乎有效,但有时无效。有时,滑块只是没有将其值设置为文本块值。
由于您在没有值转换器的情况下直接绑定 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,则可以相应地修改这些值。
希望这可以帮助!