如何根据WPF,VB.NET中的滑块中的滑块值更改文本框中的文本和标签

时间:2018-10-19 11:17:40

标签: wpf vb.net

在WFP中有一个巨大的问题,我的滑块的编号为1,2。还有两个文本框。 Textbox1和Textbox2。

因此,当我开始时,我先从滑块上的1开始,然后移动,然后按我的需要移动;当我将滑块在2上移动时,由于在文本框和滑块的值之间使用了绑定,因此Textbox1中会显示值“ 2”。 然后我做了 TexChanged子

Private Sub TextBox1_TextChanged(sender As Object, e As TextChangedEventArgs) Handles TextBox1.TextChanged

    If TextBox1.Text = "2" Then
        TextBox2.Text = "FAST"
    End If
End Sub

它起作用了,问题是当我想向后移动滑块并在“ SLOW”上转换值“ 1”时。它会阻止您所做的一切,并以任何可能的方式进行尝试。永远不允许使用滑块的起始值。您不能执行任何值为“ 1”的操作。

我想要这个工作。

Private Sub TextBox1_TextChanged(sender As Object, e As TextChangedEventArgs) Handles TextBox1.TextChanged

    If TextBox1.Text = "2" Then
        TextBox2.Text = "FAST"
    End If
    If TextBox1.Text = "1" Then
        TextBox2.Text = "SLOW"
    EndIf
End Sub

当然,当我将其置于按钮单击下时,一切都将正常运行。当我也将它放在slidermove下时,它也不起作用。请帮忙。

3 个答案:

答案 0 :(得分:1)

正如您提到的那样,“然后在文本框1中显示值“ 2”,因为我在文本框和滑块的值之间使用了绑定”

最简单的方法是更新TextBox1ViewModel setter方法的TextBox2ViewModel属性,如下所示,

Private _textBox1Value As String

Public Property TextBox1Value As String
    Get
        Return _textBox1Value
    End Get
    Set(ByVal value As String)
        _textBox1Value = value
        SetTextBox2Value(value)
        OnPropertyChanged("TextBox1Value")
    End Set
End Property

Private _textBox2Value As String
Public Property TextBox2Value As String

Private Sub SetTextBox2Value(ByVal value As String)
End Sub

假设您有一个绑定到ViewModel属性的textbox2,如果没有,则可以立即绑定它。

注意:-另一个答案(在我的帖子后看到)也很有意义,但是如果您想要一些额外的逻辑,并且如果您的滑块点增加到更多的数字并且您希望具有不同的文本值对于每个滑块位置,到目前为止,我认为viewmodel的方法很好。另外,您可以对视图模型进行单元测试,以防万一。

希望它对您有帮助:)

答案 1 :(得分:0)

首选方式是在Textbox2中使用一对触发器。

<TextBox Name="Textbox2">
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=TextBox1, Path=Text}" Value="1">
                    <Setter Property="Text" Value="Slow"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=TextBox1, Path=Text}" Value="2">
                    <Setter Property="Text" Value="Fast"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

注意:我只是注意到在您的原始示例中(被编辑之前),第二个if丢失了,if结束了。这可能是您的问题。

答案 2 :(得分:0)

@Neil B有答案,但更简单...

<TextBox Text="{Binding Path=Value, ElementName=sldValue}"/>
<Slider x:Name="sldValue"/>