如何在WPF、VB.NET中根据滑块中的滑块值更改文本框中的文本和标签
世界粮食计划署有一个巨大的问题,我有一个带有数字1,2的滑块。和两个文本框。Textbox1和Textbox2如何在WPF、VB.NET中根据滑块中的滑块值更改文本框中的文本和标签,wpf,vb.net,Wpf,Vb.net,世界粮食计划署有一个巨大的问题,我有一个带有数字1,2的滑块。和两个文本框。Textbox1和Textbox2 <TextBox Name="Textbox2"> <TextBox.Style> <Style TargetType="TextBox"> <Style.Triggers> <DataTrigger Binding="{Binding ElementN
<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>
所以,当我开始时,我在移动之前先从滑块上的1开始,这正是我需要的,当我在2上移动滑块时,值“2”显示在Textbox1中,因为我在textbox和滑块值之间使用了绑定。
然后我就这样做了
TexChanged Sub
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
这是可行的,问题是当我想向后移动滑块,并将值“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下时,它也不起作用。请帮忙 首选的方法是在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缺失,而end if缺失。这可能是您的问题。正如您所提到的这句话,“那么值“2”显示在Textbox1中,因为我在textbox和slider的值之间使用了绑定” 最简单的方法是更新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方法是好的,到目前为止,我觉得。如果需要,还可以对viewmodel进行单元测试
希望它能帮助你:)@Neil B有答案,但更简单
<TextBox Text="{Binding Path=Value, ElementName=sldValue}"/>
<Slider x:Name="sldValue"/>
在“SetTextBox2Value”方法中,使用switch或任何其他条件语句编写逻辑。谢谢您的尝试。我尝试过了,但OnPropertyChanged()上出现错误,_textBox2Value上出现冲突,将尝试按您的方式工作,并将我的答案进行分组,因为我的事件处理程序有“[CallerMemberName]”所以在我的例子中,它不需要传递参数。很抱歉给你带来了困惑。第二个问题是冲突,因为viewmodel中可能有其他同名属性。检查副本,然后再试一次。非常感谢。我会再试一次。谢谢,它工作得非常好,只是我必须将第一行更改为“确定”。如果您找到了解决方案,请不要忘记选择答案。