我的WPF应用中有一个Button和一个TextBox。如何在用户在TextBox中输入一些文本之前不启用Button?
答案 0 :(得分:46)
这应该这样做:
<StackPanel>
<TextBox x:Name="TheTextBox" />
<Button Content="Click Me">
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding Text, ElementName=TheTextBox}" Value="">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
答案 1 :(得分:18)
在MVVM中(这会使很多事情变得容易一些 - 你应该尝试一下)你的ViewModel Text
中有两个属性绑定到你的TextBox,你会有一个ICommand绑定到按钮的属性Apply
(或类似):
<Button Command="Apply">Apply</Button>
ICommand
界面有一个方法CanExecute
,您可以在其中返回true
if (!string.IsNullOrWhiteSpace(this.Text)
。其余的由WPF为您完成(启用/禁用,在点击时执行实际命令)。
链接的文章详细解释了它。
答案 2 :(得分:14)
按代码:
btn_edit.IsEnabled = true;
通过XAML:
<Button Content="Edit data" Grid.Column="1" Name="btn_edit" Grid.Row="1" IsEnabled="False" />
答案 3 :(得分:5)
我知道这不像其他帖子那么优雅,但它是一个更直接的xaml / codebehind示例,说明如何完成同样的事情。
的Xaml:
<StackPanel Orientation="Horizontal">
<TextBox Name="TextBox01" VerticalAlignment="Top" HorizontalAlignment="Left" Width="70" />
<Button Name="Button01" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,0,0,0" />
</StackPanel>
代码隐藏:
Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Button01.IsEnabled = False
Button01.Content = "I am Disabled"
End Sub
Private Sub TextBox01_TextChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles TextBox01.TextChanged
If TextBox01.Text.Trim.Length > 0 Then
Button01.IsEnabled = True
Button01.Content = "I am Enabled"
Else
Button01.IsEnabled = False
Button01.Content = "I am Disabled"
End If
End Sub
答案 4 :(得分:0)
您可以订阅TextChanged
上的TextBox
事件,如果文本为空,请将Button
设置为禁用。或者您可以将Button.IsEnabled
属性绑定到TextBox.Text
属性,并使用转换器,如果有任何文本则返回true,否则返回false。