我有一个WPF列表框,其中包含一个名为JUC的用户控件。
这很好用,因为我是WPF的新手,这已经给我留下了深刻的印象。我现在想做的是根据绑定的属性在列表中拥有不同的用户控件。
这个是可能的吗?如果没有,我还应该如何实现这一点?
我使用列表是因为我想要允许用户控件的拖放排序,并且会有一个可变的数字,所以看起来很有意义--欢迎其他方法。
<ListBox x:Name="peopleListBox"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemContainerStyle="{StaticResource ListBoxItemStretch}"
Foreground="Transparent"
BorderBrush="Transparent"
Background="Transparent"
Grid.ColumnSpan="2" SelectionChanged="peopleListBox_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<my:JUC Margin="4"></my:JUC>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>发布于 2011-10-24 23:03:24
您可以使用DataTemplateSelector,在SelectTemplate()方法中,您可以检查当前传入的item使用哪个DataTemplate:
在XAML中:
<!-- define templates in resources
ChartDataTemplate is a ChartDataTemplate.xaml, the same for other
-->
<UserControl.Resources>
<DataTemplate x:Key="ChartDataTemplate">
<views:LineChartView />
</DataTemplate>
<DataTemplate x:Key="GridDataTemplate">
<views:PieChartView />
</DataTemplate>
</UserControl.Resources>
<!-- ListView Itemtemplate should point to template selector -->
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentPresenter
ContentTemplateSelector = "{StaticResource MyTemplateSelector}">在Code Code中:
private sealed class MyTemplateSelector: DataTemplateSelector
{
public override DataTemplate SelectTemplate(
object item,
DependencyObject container)
{
// 1. case item to your object which is bound to each ListView item
// 2. based on object type/state return correct DataTemplate
// as this.Resources["ChartDataTemplate"] or
// this.Resources["GridDataTemplate"]
}
}https://stackoverflow.com/questions/7877645
复制相似问题