【问题标题】:slider control and textblock control interaction-Metro apps滑块控件和文本块控件交互-Metro 应用程序
【发布时间】:2013-05-13 09:55:52
【问题描述】:

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

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

我需要转换器来设置滑块的值吗?绑定有时似乎有效,但有时无效。有时,滑块只是没有将其值设置为文本块值。

【问题讨论】:

    标签: xaml windows-runtime winrt-xaml


    【解决方案1】:

    由于您在没有值转换器的情况下直接绑定 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,则可以相应地修改这些值。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多