通过拖动滑块和单击按钮具有不同的触发器来更改Slider的值

时间:2018-03-19 06:38:33

标签: c# wpf slider

我有三个控件:滑块,按钮和文本框。 而我想要实现的是当我拖动滑块来改变它的值时,文本框的内容会发生变化。文本框的内容是滑块的值。但是,当我单击按钮时,滑块的值加1但是文本框的内容没有改变。文本框显示了Slider的值。但是只有当我通过拖动滑块来改变滑块的值时,它才会改变它的内容。 那么如何在代码中完成这项工作呢?

enter image description here

2 个答案:

答案 0 :(得分:0)

使用元素名称

将文本框TEXT属性绑定到滑块的VALUE属性
 <Slider x:Name="Slider"></Slider>
 <TextBox x:Name="SliderValue" Text="{Binding ElementName=Slider, Path=Value}"></TextBox>

当滑块值更改时,文本框将自动更新。

答案 1 :(得分:0)

Here是我找到解决方案的地方。

我的代码是: 在Xaml:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Slider Name="mySlider" ValueChanged="mySlider_ValueChanged" Thumb.DragStarted ="mySlider_DragStarted"
            Thumb.DragCompleted ="mySlider_DragCompleted"/>
    <TextBox Name="tboxValue" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Text="0"
             Grid.Row="1"/>
    <Button Content="Add" Name="btnAdd" Click="btnAdd_Click" Grid.Row="2"/>
</Grid>

在代码中:

private bool isdragging = false;

    private void btnAdd_Click(object sender, RoutedEventArgs e)
    {
        mySlider.Value += 1;
    }

    private void mySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        if (isdragging)
            tboxValue.Text = mySlider.Value.ToString();
    }

    private void mySlider_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
    {
        isdragging = true;
    }

    private void mySlider_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
    {
        isdragging = false;
    }

它非常适合我。