如何动态创建包含WPF中用户控件的堆栈面板列表框?

时间:2013-06-07 11:20:43

标签: wpf user-controls listbox wpf-controls stackpanel

如何在包含一些相同类型的自定义用户控件的堆栈面板的WPF列表框中创建? 列表框和堆栈面板应该是可滚动的。 ListBox.Items动态添加,UserControls也添加到StackPanels。 我试过google,没有找到类似的东西,只有带有复选框和图片的简单列表框示例。

1 个答案:

答案 0 :(得分:0)

使用ScrollViewer和ItemsControl

例如:

<ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Visible">
 <ItemsControl x:Name="personsColl" ItemsSource="{Binding Path=Persons,
                                              ElementName=CustomPersonInfoColl,
                                              Mode=TwoWay,
                                              UpdateSourceTrigger=PropertyChanged}">
 <ItemsControl.ItemTemplate>
       <DataTemplate>
         <Grid x:Name="personMainContainer">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"  />
    </Grid.ColumnDefinitions>
        <!-- context for reapeat -->
        <local:PersonInfo ....  />
    </Grid> 
</DataTemplate>
 </ItemsControl.ItemTemplate>
 <ItemsControl.ItemsPanel>
             <ItemsPanelTemplate>
                     <VirtualizingStackPanel Orientation="Vertical"/>
              </ItemsPanelTemplate>
 </ItemsControl.ItemsPanel>

</ItemsControl>

别忘了

<UserControl  x:Name="CustomPersonInfoColl" .... >

并返回代码

public partial class PersonInfoCollection : UserControl, INotifyPropertyChanged
{
    [Bindable(true)]
    public IList<ShortPersonInfo> Persons
    {
        get { return (IList<ShortPersonInfo>)this.GetValue(PersonsProperty); }
        set { this.SetValue(PersonsProperty, value); OnPropertyChanged("Persons");}
    }

    public static readonly DependencyProperty PersonsProperty =
        DependencyProperty.Register("Persons",
            typeof(IList<ShortPersonInfo>),
            typeof(PersonInfoCollection));
}

您可以从其他获胜表格或控件中填写人员收藏。