0

WPFグリッドに次のボタンがあります。

<Button FontSize="18" Height="32" Content="Add Module" Name="AddModuleButton" Click="AddModuleButton_Click">
    <Button.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=val_Name, Path=Text}" Value="{x:Static sys:String.Empty}">
                    <Setter Property="Button.IsEnabled" Value="false" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

ご覧のとおり、テキストが空でない場合、ボタンは有効になっています。しかし、私が本当に望んでいるのは、テキストボックスが空であるか空白だけである場合にそれを有効にすることです。

誰かがWPFXAMLでこれを行う方法を教えてもらえますか

4

2 に答える 2

1

3つのアプローチが思い浮かびます。

  1. (表示)モデルの状態:オブジェクトにブールプロパティがあり、それをバインドするだけです。

     public bool CanAddModule { get { return !String.IsNullOrWhiteSpace(Text); } }
     public string Text
     {
         get { return _text; }
         set
         {
             if (value != _text)
             {
                 _text = value;
                 OnPropertyChanged("Text");
                 OnPropertyChanged("CanAddModule"); // Notify dependent get-only property
             }
         }
     }
    
    <TextBox Text="{Binding Text}" .../>
    <Button IsEnabled="{Binding CanAddModule}" .../>
    
  2. 上記の拡張は、をバインドすることになります。コマンドには、この機能を提供Button.Commandするが内部にあります。CanExecuteその関数がfalseの場合、Buttonは無効になります。CanExecuteChanged関数が依存している変更されたすべてのプロパティでイベントを発生させる必要があります。

  3. コンバーター:バインディングにコンバーターを追加します。

     // In converter class
     public object Convert(object value, ...)
     {
          var input = (string)value;
          return String.IsNullOrWhiteSpace(input);
     }
    
     <!--Resources-->
     <vc:IsNullOrWhiteSpaceConverter x:Key="NWSConv" />
    
     <DataTrigger Binding="{Binding Text,
                                    ElementName=val_Name,
                                    Converter={StaticResource NWSConv}}"
                  Value="false">
    
于 2012-08-22T10:19:40.040 に答える
0

私はこの質問に対する完全な答えではないが、私の問題の解決策として機能する解決策を思いついた。

TextBoxにTextChangedイベントを追加しました。

TextBox lTextBox = (TextBox)sender;
string lCurrText = lTextBox.Text;
string lNewText = Regex.Replace(lCurrText, @"\W", "");
lTextBox.Text = lNewText;

現在、空白は許可されていません。

于 2012-08-22T09:26:10.110 に答える