2010-05-25 37 views

cevap

43

Bu yapmalıyım:

<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> 
+2

ViewModel'de doğrulama işlemini yapmak çok daha şık. Yazılan Josh Smith bitbonk makalesine bir göz atın. –

+3

@Helge Klein, Kesinlikle katılıyorum, ama OP MVVM kullandığını belirtmediği için ve tanıdık değilse ona geçmenin önemsiz olduğunu düşündüğümde, sadece en basit şekilde yanıtlayacağımı düşündüm mümkün moda –

+1

Anladım. Sadece daha karmaşık bir çözüm varsa, gelecekteki okuyucuları "daha iyi" ye işaret etmek istedim. –

0

TextBox'da TextChanged etkinliğine abone olabilir ve metin boşsa Button'u devre dışı olarak ayarlayın. Veya Button.IsEnabled özelliğini TextBox.Text özelliğine bağlayabilir ve herhangi bir metin varsa ve aksi takdirde yanlış olduğunda döndüren bir dönüştürücü kullanabilirsiniz.

+0

WPF hayır t pencereleri alışkanlıklar oluşturur ... – msfanboy

16

MVVM yılında (wich bir çok şey çok daha kolay hale getirir - bunu denemelisiniz) Eğer TextBox bağlı olduğu için ViewModel Text iki özelliklere sahip ve olurdu Eğerdönmek nerede olduğunu

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

ICommand arayüzü Yöntem CanExecute vardır: Eğer düğme bağlı olduğu (veya benzeri) bir iCommand özelliği Apply olurduif (!string.IsNullOrWhiteSpace(this.Text). Geri kalanlar sizin için WPF tarafından yapılır (etkinleştirmek/devre dışı bırakmak, tıklamadaki gerçek komutu yürütmek). Bağlantılı makalede ayrıntılı olarak anlatılmaktadır.

5

Bunun diğer gönderiler kadar zarif olmadığını biliyorum, ancak aynı şeyin nasıl gerçekleştirileceğine dair daha basit bir xaml/codebehind örneğidir.

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: XAML ile

btn_edit.IsEnabled = true; 

: koduna göre

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

Windows 8 beta, bunu başarmanın tek yolu olacak. En azından bugün için. –

11

<Button Content="Edit data" Grid.Column="1" Name="btn_edit" Grid.Row="1" IsEnabled="False" /> 
İlgili konular