如何禁用所有按钮

时间:2011-01-14 15:13:50

标签: c# button expression-blend

我有一个方法可以禁用窗口上的所有butttons。 但我似乎无法获得Button类型以匹配资源集合

我正在使用带有c#代码隐藏的Expression Blend 3

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 好像不包括我的按钮!这可能是 Blend 的事情吗?

所以是的。 我最终手动完成了。因为我很仓促,并没有一个简单的简单解决方案。感谢所有的输入!

6 个答案:

答案 0 :(得分:5)

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

实现它的简单方法是使用带有LINQ查询的foreach指令,但这种方式需要更多的资源。

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

答案 1 :(得分:2)

我可能会误解某些内容,但您正试图在窗口的资源中找到窗口中的按钮?因为这两件事情完全不同。
如果是这种情况,请尝试设置this.IsEnabled = false(但禁用其他内容,而不仅仅是按钮),或者使用LogicalTreeHelper / VisualTreeHelper遍历逻辑树(或者如果是silverlight的可视树),尽管这是一种非常昂贵的方法。
手动解决方法是为所有按钮指定名称,在代码隐藏中列出它们并迭代该列表。

然而最好的方法是在ViewModel中创建一个名为AreButtonsEnabled的布尔属性(如果你不使用MVVM而不是简单地在控件本身上 - 但是使它成为DependencyProperty)并绑定所有按钮的IsEnabled属性给他们!然后在codebehind中简单地将布尔值设置为false ......然后魔术就会出现。

如果这不是你的情况,那么抱歉我浪费了你的时间。

答案 2 :(得分:1)

这是怎么回事?

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

甚至更好

if (this.Resources[i] is Button))

答案 3 :(得分:1)

看起来你的循环语句是错误的。 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;
        }
    }

答案 4 :(得分:1)

怎么样?

if (this.Resources[i] is Button)

这样你就可以得到任何继承自Button的东西。

答案 5 :(得分:1)

我使用一种简单的方法。 首先,你创建一个布尔。

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。