如何禁用所有按钮
我有一种方法禁用了我窗口上的所有按钮。 但我似乎无法得到巴顿的类型匹配到资源集合如何禁用所有按钮
我使用的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
似乎不包括我的按钮!这可能是一个混合的事情?
所以是的。 我最终手动完成了。因为我仓促,并没有一个简单的解决方案。感谢所有的输入!
有可能我误解了某些东西,但是您试图在您的窗口的RESOURCES中找到窗口中包含的按钮?因为这两件事完全不同。
如果是这种情况,请尝试设置this.IsEnabled = false(但禁用其他事物,而不仅仅是按钮),或者使用LogicalTreeHelper/VisualTreeHelper遍历逻辑树(或可视化树,如果silverlight),虽然这是非常非常昂贵的方法。
手动解决方法是为所有按钮指定名称,在代码隐藏中制作它们的列表并迭代该列表。
然而最好是在你的视图模型来创建一个名为AreButtonsEnabled一个布尔属性(如果你不使用MVVM不是简单地在控制本身 - 而是使它的DependencyProperty)和您的所有按钮的IsEnabled属性绑定到他们!然后在代码隐藏中,只需将该布尔值设置为false即可,然后魔法随之发生。
如果这不是你的情况,那么对不起我浪费你的时间。
这个怎么样?
if (this.Resources[i].GetType() == typeof(Button)))
甚至更好
if (this.Resources[i] is Button))
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;
}
}
它看起来像你的循环语句是错误的。 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;
}
}
什么?
if (this.Resources[i] is Button)
这样你就可以得到任何继承自Button的东西。
我用一个简单的方法。 首先你创建一个布尔。
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。
这是案例,你的想法很有趣。我会尽力的。 – 2011-01-17 07:57:12