Есть ли способ группировать RadioButton, сгенерированные из ItemTemplate элемента ItemsControl

 <DataTemplate x:Key="Genre_DataTemplate">
        <RadioButton GroupName="One" Content="{Binding...
 </DataTemplate>

Вышеупомянутый код - это ItemTemplate моего ItemsControl, я хочу, чтобы все созданные экземпляры Radiobutton вели себя так, как если бы они были в группе, я знаю причину, потому что сгенерированные RadioButtons не являются смежными в визуальном дереве.

Любое решение или обходной путь, чтобы сгруппировать их вместе? Свойство GroupName здесь тоже не действует.

[Обновление] Я пробую это в Silverlight


person Jobi Joy    schedule 04.10.2008    source источник


Ответы (2)


Проблема в том, что поведение RadioButton.GroupName зависит от логического дерева, чтобы найти общего предка и эффективно ограничить его использование этой частью дерева, но ItemsControl Silverlight не поддерживает логическое дерево. Это означает, что в вашем примере свойство RadioButton Parent всегда равно null

Я построил простое прикрепленное поведение, чтобы исправить это. Он доступен здесь: http://www.dragonshed.org/blog/2009/03/08/radiobuttons-in-a-datatemplate-in-silverlight/

person Karim Hernandez    schedule 08.03.2009

Я думаю, что проблема где-то еще в дереве управления. Вы можете разместить более подробную информацию?

Вот пример кода xaml, который работает должным образом:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 <Grid>
    <Grid.Resources>
       <XmlDataProvider x:Key="flickrdata" Source="http://api.flickr.com/services/feeds/photos_public.gne?tags=flower&amp;lang=en-us&amp;format=rss_200">
          <XmlDataProvider.XmlNamespaceManager>
             <XmlNamespaceMappingCollection>
                <XmlNamespaceMapping Prefix="media" Uri="http://search.yahoo.com/mrss/"/>
             </XmlNamespaceMappingCollection>
          </XmlDataProvider.XmlNamespaceManager>
       </XmlDataProvider>
       <DataTemplate x:Key="itemTemplate">
        <RadioButton GroupName="One">
          <Image Width="75" Height="75" Source="{Binding Mode=OneWay, XPath=media:thumbnail/@url}"/>
        </RadioButton>
       </DataTemplate>
       <ControlTemplate x:Key="controlTemplate" TargetType="{x:Type ItemsControl}">
          <WrapPanel IsItemsHost="True" Orientation="Horizontal"/>
       </ControlTemplate>
    </Grid.Resources>
    <ItemsControl
       Width="375"
       ItemsSource="{Binding Mode=Default, Source={StaticResource flickrdata}, XPath=/rss/channel/item}"
       ItemTemplate="{StaticResource itemTemplate}"
       Template="{StaticResource controlTemplate}">
    </ItemsControl>
 </Grid>

</Page>

P.S .: Для группировки рабочих элементов радио-кнопки должны иметь одного и того же родителя (как они обычно имеют при генерации из ItemsControl)

person ligaz    schedule 04.10.2008
comment
Это правильное решение этой проблемы в WPF, сделав шаблон элемента управления ItemsControl как панель с ItemsHost, но у нас нет ItemHost в Silverlight (я не уверен). Любой обходной путь в Silverlight - person Jobi Joy; 05.10.2008