2011-01-14 12 views
2

Ich habe eine Methode, die alle Schaltflächen auf meinem Fenster deaktiviert. Aber ich kann es nicht in die Ressourcensammlung scheinen die Art der Knopf zu bekommenSo deaktivieren Sie alle Schaltflächen

Ich bin mit Expression Blend 3 mit C# Code-behind

void DisableButtons() 
    { 
     for(int i = 0; i>= this.Resources.Count -1; i ++) 
     { 
      if (this.Resources[i].GetType() == typeof(Button)) 
      { 
       Button btn = (Button)this.Resources[i]; 
       btn.IsEnabled = false; 
      } 
     } 

    } 

aktualisieren

übereinstimmen

Danke für die Antworten! Ok Die Schleife funktioniert, aber mein Code ist falsch. this.Resources Scheint nicht meine Tasten enthalten! Dies könnte ein Blend Ding sein?

Also ja. Ich habe es manuell getan. Denn ich bin übereilt und es gibt keine kurze, einfache Lösung. Danke für alle Beiträge!

Antwort

2

Es ist möglich, dass ich etwas missverstanden habe, aber du versuchst, in deinem Fenster in den RESSOURCEN deines Fensters Buttons enthalten zu finden? Denn diese beiden Dinge sind allesamt verschiedene Dinge.
Wenn das der Fall ist, entweder versuchen this.IsEnabled = false setzen (aber das deaktiviert andere Dinge, nicht nur Tasten) oder den logischen Baum durchlaufen (oder visuelle Struktur, wenn Silverlight) mit LogicalTreeHelper/VisualTreeHelper, obwohl das einem sehr teure Methode.
Manuelles Workaround wäre, allen Tasten Namen zu geben, eine Liste von ihnen im Codebehind zu erstellen und diese Liste zu iterieren.

jedoch das Beste wäre, eine Boolesche Eigenschaft erstellen genannt AreButtonsEnabled in Ihrem Viewmodel (wenn Sie nicht MVVM als einfach auf die Steuerung über sich selbst - aber es DependencyProperty machen) und binden alle die Ihre Schaltfläche, um sie IsEnabled Eigentum ! Und dann im Codebehind einfach diesen Booleschen Wert auf Falsch setzen ... und es folgt Magie.

Ist dies nicht der Fall ist, dann sorry ich verschwendet Ihre Zeit.

+0

Das ist der Fall, und Ihnen ist eine interessante Idee. Ich werde es versuchen. –

0

was ist das?

if (this.Resources[i].GetType() == typeof(Button))) 

oder noch besser

if (this.Resources[i] is Button)) 
4
void DisableButtons() 
{ 
    for(int i = 0; i < Resources.Count; i ++) 
    { 
     var btn = Resources[i] as Button; 
     if(btn != null) 
     { 
      btn.IsEnabled = false; 
     } 
    } 
} 

einfache Art und Weise zu implementieren, ist die Verwendung foreach Anweisung mit LINQ-Abfrage, aber auf diese Weise für mehr resuources whan einfach brauchen.

void DisableButtons() 
{ 
    foreach(var button in Resources.OfType<Button>()) 
    { 
     button.IsEnabled = false; 
    } 
} 
0

Es sieht aus wie Ihre Schleife-Anweisung falsch ist. i>= this.Resources.Count -1 sollte i <= this.Resources.Count - 1; sein Es wird nie in Ihre Schleife kommen.

Auch dies ist nur eine Art Sache, aber ich würde umschreiben als:

for(int i = 0; i < Resources.Count; i ++) 
    { 
     Button btn = Resources[i] as Button; // btn will be null if not a Button 

     if(btn != null) 
     { 
      btn.IsEnabled = false; 
     } 
    } 
0

Was ist das?

if (this.Resources[i] is Button) 

Auf diese Weise können Sie alles erhalten, was von Button erbt.

0

Ich verwende eine einfache Methode. Zuerst erstellen Sie ein Bool.

Jetzt füge ich einen Timer zu dem Formular, das die ganze Zeit aktiv ist. So

private void timer1_Tick(object sender, EventArgs e) 
{ 
if (enableButtons = false) 
{ 
    button1.Enabled = false; 
    button2.Enabled = false; 
} 
else 
{ 
    button1.Enabled = true; 
    button2.Enabled = true; 
} 
} 

, wenn ich die Tasten deaktivieren möchten, ich ändern, nur enableButtons auf false gesetzt.

Verwandte Themen