C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
TextChanged: On the TextBox I added a TextChanged event handler. Press tab after typing TextChanged in the XAML.
Name: On the Button, I added a Name attribute. This makes the Button easy to access in C# code by the identifier "SendButton."
NameTextChanged: Here we cast the sender object to a TextBox reference with the as-cast. Then, we access the Button by its name (SendButton).
AsAnd: IsEnabled is assigned to the result of an expression. The expression evaluates to true when the TextBox has one or more characters.
So: The Button becomes enabled when the TextBox has text. It remains disabled whenever the TextBox is empty.
Example markup: XAML
<Window x:Class="WpfApplication12.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox HorizontalAlignment="Left" Height="23" Margin="10,10,0,0"
TextWrapping="Wrap" Text=""
VerticalAlignment="Top" Width="120"
TextChanged="TextBox_TextChanged"/>
<Button Content="Send" HorizontalAlignment="Left" Margin="135,10,0,0"
VerticalAlignment="Top" Width="75"
IsEnabled="False"
Name="SendButton"/>
</Grid>
</Window>
Example code: C#
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication12
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
// Cast TextBox.
TextBox box = sender as TextBox;
// If text is present, enable the button.
// ... Otherwise disable the button.
this.SendButton.IsEnabled = box.Text.Length > 0;
}
}
}
Instead: The IsEnabled property is tied to an expression. It handles true and false values correctly.
PropertyAnd: The enabled state of the Button will not lose sync with the TextBox. This approach leads to UIs that are reliable.