我正在寻找一种简单的方法来遍历给定标签的屏幕上的所有按钮。例如“foo”。我正在使用WP#,使用C#。我对这个平台很新,所以对我很轻松:P
谷歌搜索这种东西对我来说也不是很有效 - 我认为我的术语有误,所以任何有关这方面的提示都会受到赞赏。答案 0 :(得分:5)
您应该遍历页面上的所有控件,检查每个控件是否都是按钮,如果是,请检查其Tag属性。
像这样......
foreach (UIElement ctrl in ContentPanel.Children)
{
if (ctrl.GetType() == typeof(Button))
{
Button potentialButton = ((Button)ctrl);
if (potentialButton.Tag = Tag)
return (Button)ctrl;
}
}
请记住,如果您在页面上嵌套控件,则需要考虑递归到包含子项的任何项目,以确保捕获所有控件。
答案 1 :(得分:2)
首先,创建一个方法来递归地枚举页面中的控件:
public static IEnumerable<FrameworkElement> FindVisualChildren(FrameworkElement control)
{
if (control == null)
{
yield break;
}
for (int i = 0; i < System.Windows.Media.VisualTreeHelper.GetChildrenCount(control); i++)
{
var child = System.Windows.Media.VisualTreeHelper.GetChild(control, i) as FrameworkElement;
if (child != null)
{
yield return child;
foreach (var grandChild in FindVisualChildren(child))
{
yield return grandChild;
}
}
}
}
然后调用它并仅保留您想要的控件:
var buttons = FindVisualChildren(this.ContentPanel)
.OfType<Button>()
.Where(b => b.Tag is string && (string)b.Tag == "foo");
(其中ContentPanel是您网页的根元素)