Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xaml 滑块控制和文本块控制交互Metro应用程序_Xaml_Windows Runtime_Winrt Xaml - Fatal编程技术网

Xaml 滑块控制和文本块控制交互Metro应用程序

Xaml 滑块控制和文本块控制交互Metro应用程序,xaml,windows-runtime,winrt-xaml,Xaml,Windows Runtime,Winrt Xaml,我试图通过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"/>  


我是否需要一个转换器来设置滑块的值。装订有时似乎有效,但有时不起作用。有时,滑块没有将其值设置为文本块值。

由于您直接绑定滑块的值,而不使用值转换器,因此我怀疑当文本不是数字或超出范围时,绑定会中断

您可以通过创建一个值转换器来防止坏值被绑定,这样绑定就会一直工作

以下是一些例子:

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();
    }
}
公共类TextToSliderValueConverter:IValueConverter
{
公共双MaximumSliderValue{get;set;}
公共双极小SliderValue{get;set;}
公共对象转换(对象值、类型targetType、对象参数、字符串语言)
{
双滑动值;
if(double.TryParse(值为字符串,out sliderValue)
&&sliderValue=最小sliderValue)
{
返回sliderValue;
}
其他的
{
返回0.0;
}
}
公共对象转换回(对象值、类型targetType、对象参数、字符串语言)
{
抛出新的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,则可以相应地修改这些值

希望这有帮助