Подтвердить что ты не робот

Отключить кнопку в WPF?

У меня есть Button и TextBox в моем приложении WPF. Как я могу сделать кнопку не включенной, пока пользователь не вводит какой-либо текст в TextBox?

4b9b3361

Ответ 1

Это должно сделать это:

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

Ответ 2

В MVVM (много чего много проще - вы должны попробовать) у вас будет два свойства в ViewModel Text, привязанный к вашему TextBox, и у вас будет свойство ICommand Apply (или подобное), связанное с кнопкой:

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

Интерфейс ICommand имеет метод CanExecute, в котором вы возвращаете true if (!string.IsNullOrWhiteSpace(this.Text). Остальное выполняется WPF для вас (включение/отключение, выполнение фактической команды при нажатии).

Связанная статья подробно объясняет это.

Ответ 3

По коду:

btn_edit.IsEnabled = true;

В XAML:

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

Ответ 4

Я знаю, что это не так элегантно, как другие сообщения, но это более простой пример 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>

CodeBehind:

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

Ответ 5

Вы можете подписаться на событие TextChanged на TextBox, и если текст пуст, отключите Button. Или вы можете привязать свойство Button.IsEnabled к свойству TextBox.Text и использовать конвертер, который возвращает true, если в противном случае есть текст и false.