如何解决Windows Phone 7:如何从窗口获取所有按钮?
| 如何从窗口获取所有按钮? (将IsEnabled属性设置为false)解决方法
您可以遍历所有控件。例如:
foreach (var ctrl in LayoutRoot.Children)
{
if (ctrl is Button)
((Button)ctrl).IsEnabled = false;
}
当然,“ 1”是默认名称。您可以根据需要将其更改为另一个容器。
编辑以允许嵌套面板的递归(在注释中提到)。
private void DisableAllButtons(Panel parent)
{
foreach (var ctrl in parent.Children)
{
if (ctrl is Button)
{
((Button)(ctrl)).IsEnabled = false;
}
else
{
if (ctrl is Panel)
{
if (((Panel)ctrl).Children.Count > 0)
{
DisableAllButtons((Panel)ctrl);
}
}
}
}
}
, 好吧,DisableAllButtons()有时可能会起作用,但是总的来说是不够的。这是一个真实的例子。 (经过一些简化。)
列表框
滚动查看器
边境
格网
ScrollContentPresenter
项目演示者
虚拟化堆栈面板
ListBoxItem
ContentPresenter
格网
文字区块
文字区块
纽扣
ListBoxItem
ContentPresenter
格网
文字区块
文字区块
文字区块
滚动条
格网
格网
重复按钮
拇指
长方形
重复按钮
如果您想要一个可靠的解决方案,则代替枚举Panel子级使用
VisualTreeHelper类及其方法GetCildrenCount()和GetChild()。这是代码:
void DisableAllButtons(FrameworkElement fe)
{
if (fe is Button)
((Button)(fe)).IsEnabled = false;
int count = VisualTreeHelper.GetChildrenCount(fe);
for (int index = 0; index < count; ++index)
{
DisableAllButtons( (FrameworkElement)VisualTreeHelper.GetChild(fe,index) );
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。