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