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

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

48
задан S.L. Barth - Reinstate Monica 20 October 2014 в 14:53
поделиться

4 ответа

Это должно сработать:

<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>
48
ответ дан 26 November 2019 в 18:48
поделиться

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

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

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

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

19
ответ дан 26 November 2019 в 18:48
поделиться

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

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

0
ответ дан 26 November 2019 в 18:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: