2012-08-22 75 views
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> 

正如你可以看到,如果文本不爲空的按鈕被激活。但我真正想要的是,如果文本框爲空或只有空格,則啓用它。

誰能告訴我如何做到這一點的WPF XAML

+0

你可以嘗試multibinding或多個綁定。對於該值,可以提供另一個包含所有字符的靜態類和屬性。 – dowhilefor

回答

1

想到三種方法。

  1. (查看)型號的狀態:具有一個布爾值屬性中的對象,只是binding它。

    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供應該功能的擴展。如果該功能爲假,則Button會被禁用。您需要在每個屬性更改的函數所依賴的位置上提高CanExecuteChanged事件。

  3. Converter:添加轉換器到綁定。

    // 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"> 
    
0

我想出了一個解決方案,不是一個完整的回答這個問題,而是一個將工作作爲我的問題的解決方案。

我說我的一個文本框TextChanged事件:

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

它不允許空格現在。