禁用WPF中的button?
我在我的WPF应用程序中有一个button和一个文本框。 如何才能使button不启用,直到用户在文本框中input一些文本?
这应该做到这一点:
<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:
<Button Command="Apply">Apply</Button>
ICommand
接口有一个方法CanExecute
,它返回true
if (!string.IsNullOrWhiteSpace(this.Text)
。其余由WPF为你完成(启用/禁用,单击执行实际命令)。
链接的文章详细解释它。
按代码:
btn_edit.IsEnabled = true;
通过XAML:
<Button Content="Edit data" Grid.Column="1" Name="btn_edit" Grid.Row="1" IsEnabled="False" />
我知道这不像其他职位那样优雅,但是它是一个更直接的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>
代码隐藏:
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
您可以订阅TextBox
上的TextChanged
事件,如果文本为空,则将Button
设置为禁用。 或者,您可以将Button.IsEnabled
属性绑定到TextBox.Text
属性,并使用一个转换器,如果有任何文本,则返回true,否则返回false。