2011-01-14 42 views
2

我有一種方法禁用了我窗口上的所有按鈕。 但我似乎無法得到巴頓的類型匹配到資源集合如何禁用所有按鈕

我使用的Expression Blend 3與C#隱藏代碼

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; 
      } 
     } 

    } 

更新

感謝您的答案! 好吧循環正在工作,但我的代碼是不正確的。 this.Resources 似乎不包括我的按鈕!這可能是一個混合的事情?

所以是的。 我最終手動完成了。因爲我倉促,並沒有一個簡單的解決方案。感謝所有的輸入!

回答

2

有可能我誤解了某些東西,但是您試圖在您的窗口的RESOURCES中找到窗口中包含的按鈕?因爲這兩件事完全不同。
如果是這種情況,請嘗試設置this.IsEnabled = false(但禁用其他事物,而不僅僅是按鈕),或者使用LogicalTreeHelper/VisualTreeHelper遍歷邏輯樹(或可視化樹,如果silverlight),雖然這是非常非常昂貴的方法。
手動解決方法是爲所有按鈕指定名稱,在代碼隱藏中製作它們的列表並迭代該列表。

然而最好是在你的視圖模型來創建一個名爲AreButtonsEnabled一個布爾屬性(如果你不使用MVVM不是簡單地在控制本身 - 而是使它的DependencyProperty)和您的所有按鈕的IsEnabled屬性綁定到他們!然後在代碼隱藏中,只需將該布爾值設置爲false即可,然後魔法隨之發生。

如果這不是你的情況,那麼對不起我浪費你的時間。

+0

這是案例,你的想法很有趣。我會盡力的。 – 2011-01-17 07:57:12

0

這個怎麼樣?

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

甚至更​​好

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; 
     } 
    } 
} 

來實現它簡便方法是使用LINQ查詢使用的foreach指令,但這種方式需要更多的resuources煥容易。

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

它看起來像你的循環語句是錯誤的。 i>= this.Resources.Count -1應該是i <= this.Resources.Count - 1;它永遠不會進入你的循環。

而且,這只是一種風格的東西,但我把它改寫爲:

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
有關

什麼?

if (this.Resources[i] is Button) 

這樣你就可以得到任何繼承自Button的東西。

0

我用一個簡單的方法。 首先你創建一個布爾。

bool enableButtons = true; 

現在,我添加一個定時器,它始終處於活動狀態。

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

所以每當我想禁用的按鈕,我只是改變enableButtons爲false。