2011-01-14 46 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。