禁用WPF中的button?

我在我的WPF应用程序中有一个button和一个文本框。 如何才能使button不启用,直到用户在文本框中input一些文本?

这应该做到这一点:

<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> 

在MVVM中 (这使得很多事情变得更容易 – 你应该尝试一下),你的ViewModel Text中将有两个属性绑定到你的TextBox,并且你将有一个ICommand属性Apply (或者类似)绑定到button:

 <Button Command="Apply">Apply</Button> 

ICommand接口有一个方法CanExecute ,它返回true if (!string.IsNullOrWhiteSpace(this.Text) 。其余由WPF为你完成(启用/禁用,单击执行实际命令)。

链接的文章详细解释它。

按代码:

 btn_edit.IsEnabled = true; 

通过XAML:

 <Button Content="Edit data" Grid.Column="1" Name="btn_edit" Grid.Row="1" IsEnabled="False" /> 

我知道这不像其他职位那样优雅,但是它是一个更直接的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 

您可以订阅TextBox上的TextChanged事件,如果文本为空,则将Button设置为禁用。 或者,您可以将Button.IsEnabled属性绑定到TextBox.Text属性,并使用一个转换器,如果有任何文本,则返回true,否则返回false。