У меня есть Кнопка и TextBox в моем приложении WPF. Как я могу сделать Кнопку не включенной, пока пользователь не вводит некоторый текст в TextBox?
Это должно сработать:
<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 Command="Apply">Apply</Button>
Интерфейс ICommand
имеет метод CanExecute
, именно здесь вы возвращаете true
if (! String.IsNullOrWhiteSpace (this.Text)
. Остальное WPF делает за вас (включение / отключение, выполнение фактической команды по щелчку).
Связанная статья объясняет это подробно.
Я знаю, что это не так элегантно, как другие сообщения, но это более простой пример 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
Вы можете подписаться на событие TextChanged
в TextBox
, и, если текст пуст, отключите кнопку
. Или вы можете привязать свойство Button.IsEnabled
к свойству TextBox.Text
и использовать преобразователь, который возвращает true, если есть какой-либо текст, и false в противном случае.