Отключить кнопку в WPF? - PullRequest
48 голосов
/ 25 мая 2010

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

Ответы [ 5 ]

46 голосов
/ 25 мая 2010

Это должно сделать это:

<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>
19 голосов
/ 25 мая 2010

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

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

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

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

14 голосов
/ 27 марта 2014

по коду:

btn_edit.IsEnabled = true;

По XAML:

<Button Content="Edit data" Grid.Column="1" Name="btn_edit" Grid.Row="1" IsEnabled="False" />
5 голосов
/ 25 мая 2010

Я знаю, что это не так элегантно, как в других публикациях, но это более простой пример 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
0 голосов
/ 25 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...