首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滑块控件和文本块控件交互-Metro应用程序

滑块控件和文本块控件交互-Metro应用程序
EN

Stack Overflow用户
提问于 2013-05-13 17:55:53
回答 1查看 764关注 0票数 0

我正在尝试通过XAML上的{Binding}将滑块控件设置为来自文本块的text属性的值。

代码语言:javascript
复制
<Slider   ValueChanged="slider_ValueChanged_1"    Value= "{Binding ElementName=ComponentTextBlockValue,Path=Text}"   StepFrequency="25"/>  

我需要一个转换器来设置滑块的值吗?绑定有时似乎有效,但有时却不起作用。有时,滑块不会将其值设置为文本块值。

EN

回答 1

Stack Overflow用户

发布于 2013-05-14 03:20:04

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

您可以通过创建一个值转换器来防止这种情况,该值转换器将阻止绑定不正确的值,因此绑定将始终有效。

下面是一些示例:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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,则可以相应地修改这些值。

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16519272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档