web-dev-qa-db-ja.com

WPFのボタンを無効にしますか?

WPFアプリにButtonとTextBoxがあります。ユーザーがTextBoxにテキストを入力するまで、ボタンを無効にするにはどうすればよいですか?

48
sanjeev40084

これはそれを行う必要があります:

<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>
46
Steve Greatrex

[〜#〜] mvvm [〜#〜] (非常に簡単になります。試してみてください)ViewModelに2つのプロパティがありますText TextBoxにバインドされており、ボタンにバインドされているICommandプロパティApply(または同様の)があります。

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

ICommandインターフェイスには、CanExecuteif (!string.IsNullOrWhiteSpace(this.Text)を返すメソッドtrueがあります。残りはWPFによって行われます(有効化/無効化、クリック時に実際のコマンドを実行)。

リンクされた記事で詳細に説明されています。

19
bitbonk

コード別:

btn_edit.IsEnabled = true;

XAMLの場合:

<Button Content="Edit data" Grid.Column="1" Name="btn_edit" Grid.Row="1" IsEnabled="False" />
15
daniele3004

私はこれが他の投稿ほどエレガントではないことを知っていますが、同じことを達成する方法のより単純なxaml /コードビハインドの例です。

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
spong

TextChangedTextBoxイベントにサブスクライブでき、テキストが空の場合はButtonを無効に設定します。または、Button.IsEnabledプロパティをTextBox.Textプロパティ。テキストがある場合はtrueを返し、そうでない場合はfalseを返すコンバーターを使用します。

0
Charlie