我有一个WPF列表框,其中包含一个名为JUC的用户控件。

这很好用,因为我对WPF还是很陌生,这已经给人留下了深刻的印象。我现在想做的是基于绑定(bind)属性在列表中具有不同的用户控件。

这可能吗?如果没有,我应该如何实现呢?

我之所以使用列表,是因为我想允许用户控件的拖放顺序,并且会有一个可变数字,因此似乎很有意义-欢迎使用其他方法。

<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>

最佳答案

您可以使用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}">

在后面的代码中:

 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"]
    }
  }

关于.net - 不同类型的用户控件的WPF列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7877645/

10-13 09:27