【发布时间】:2010-01-08 01:30:45
【问题描述】:
我有一个 Silverlight 3 应用程序,它具有使用 GroupName 属性分组的单选按钮。我想在代码中做的是检索属于指定组的所有单选按钮。有没有一种简单的方法可以做到这一点,还是我需要遍历所有控件?
谢谢。
【问题讨论】:
标签: silverlight
我有一个 Silverlight 3 应用程序,它具有使用 GroupName 属性分组的单选按钮。我想在代码中做的是检索属于指定组的所有单选按钮。有没有一种简单的方法可以做到这一点,还是我需要遍历所有控件?
谢谢。
【问题讨论】:
标签: silverlight
从answer 借用(再次)我的 VisualTreeEnumeration(我真的很需要写博客):-
public static class VisualTreeEnumeration
{
public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)
{
int count = VisualTreeHelper.GetChildrenCount(root);
for (int i=0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(root, i);
yield return child;
foreach (var descendent in Descendents(child))
yield return descendent;
}
}
}
将其放置在您的主命名空间或实用程序命名空间中的文件中,并在您的代码中放置 using 。
现在您可以使用 LINQ 获取各种有用的列表。在你的情况下:-
List<RadioButton> group = this.Descendents()
.OfType<RadioButton>()
.Where(r => r.GroupName == "MyGroupName")
.ToList();
【讨论】:
这可能会有所帮助: 基本上遍历控件以查找所需组中的单选按钮。 这也将查看所有子面板。
private List<FrameworkElement> FindBindings(DependencyObject visual, string group)
{
var results = new List<FrameworkElement>();
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(visual); i++)
{
var childVisual = VisualTreeHelper.GetChild(visual, i);
var childRadioButton = childVisual as RadioButton;
if (childRadioButton != null)
{
if (childRadioButton.GroupName == group)
{
results.Add(childRadioButton);
}
}
else
{
if (childVisual is Panel)
{
results.AddRange(FindBindings(childVisual, group));
}
}
}
return results;
}
【讨论】: