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

上面的代码是我的 ItemsControl 的 ItemTemplate,我希望所有实例化的 Radiobuttons 的行为都应该像在一个组中一样,我知道原因是因为生成的 RadioButtons 在视觉树中不相邻。

将它们组合在一起的任何解决方案或解决方法?GroupName 属性在这里也没有任何作用。

[更新] 我正在 Silverlight 中尝试这个

4

2 回答 2

4

问题是 RadioButton.GroupName 行为依赖于逻辑树来找到一个共同的祖先并有效地将其用于树的该部分,但 silverlight 的 ItemsControl 不维护逻辑树。这意味着,在您的示例中,RadioButton 的 Parent 属性始终为 null

我建立了一个简单的附加行为来解决这个问题。可在此处获得:http ://www.dragonshed.org/blog/2009/03/08/radiobuttons-in-a-datatemplate-in-silverlight/

于 2009-03-08T21:10:54.377 回答
3

我认为问题出在控制树的其他地方。你能发布更多细节吗?

这是一个按预期工作的示例 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>

PS:为了分组到工作元素,单选按钮应该具有相同的父级(就像它们通常从 ItemsControl 生成时一样)

于 2008-10-04T16:54:05.287 回答