在WPF中禁用按钮?

时间:2010-05-25 16:04:17

标签: wpf button textbox

我的WPF应用中有一个Button和一个TextBox。如何在用户在TextBox中输入一些文本之前不启用Button?

5 个答案:

答案 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。