Получить радиокнопки группы в Silverlight 3 - PullRequest
1 голос
/ 07 января 2010

У меня есть приложение Silverlight 3, и у него есть радиокнопки, сгруппированные с использованием свойства GroupName. В коде я хотел бы получить все радиокнопки, входящие в указанную группу. Есть ли простой способ сделать это, или мне нужно перебрать все элементы управления?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 07 января 2010

Заимствование (еще раз) моего 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();
0 голосов
/ 07 января 2010

Это может помочь: По существу пройдитесь по элементам управления в поисках радиокнопок в нужной группе. Это также будет просматривать любые детские панели.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...