这对我来说不合适:
<StackPanel>
<ListBox x:Name="MyListBox"
ItemsSource="{StaticResource UserControlsCollection}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
<UserControl
Content="{Binding ElementName=MyListBox, Path=SelectedValue}"
/>
</StackPanel>
我在运行时得到此“项目不在预期范围内”错误。这些是数据:
<toolkit:ObjectCollection x:Key="UserControlsCollection">
<UserControl Style="{StaticResource UserControlListItemStyle}">
<Button>One Button</Button>
</UserControl>
<UserControl Style="{StaticResource UserControlListItemStyle}">
<ComboBox>
<ComboBoxItem Content="One" IsSelected="True" />
<ComboBoxItem Content="Two" />
<ComboBoxItem Content="Three" />
</ComboBox>
</UserControl>
<UserControl Style="{StaticResource UserControlListItemStyle}">
<Rectangle
Fill="Red"
Width="120" Height="120"
/>
</UserControl>
</toolkit:ObjectCollection>
答案 0 :(得分:0)
您尝试显示相同的FrameworkElements(集合中的那些)两次:一次作为ListBox中的项目,并在绑定的UserControl中第二次选择后。
所有FrameworkElements只能挂在可视树中一次(即它们触发加载的事件时)。
要实现您的目标,您需要分离模型和视图。模型将在您的集合中,可以是任何类型,通常实现INotifyPropertyChanged或派生自DependencyObject,您的视图可以是DataTemplates作为资源,Target属性是模型的类型。
从SL5开始,任何以模型为内容的ContentControl(同样ListBox,模型作为绑定集合的元素)将自动获取那些DataTemplates(如果它们在范围内)。然后,每个模型可能会多次实例化模板。