在Silverlight 3中获取组的单选按钮

时间:2010-01-07 14:07:33

标签: silverlight

我有一个Silverlight 3应用程序,它使用GroupName属性分组radiobuttons。我想在代码中做的是检索属于指定组的所有单选按钮。有没有一种简单的方法可以做到这一点,还是我需要遍历所有控件?

感谢。

2 个答案:

答案 0 :(得分:4)

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();

答案 1 :(得分:0)

这可能会有所帮助: 基本上是通过控件查找所需组中的单选按钮。 这也将通过任何儿童面板进行查看。

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;
}