具有结束控制的Itemscontrol

时间:2018-04-30 03:03:26

标签: c# wpf controls

我的ItemsControl内嵌了自定义控件。我想要实现的是始终在TextBox的末尾始终拥有WrapPanel控制以及我的自定义控件。

这是一个小小的预览:

enter image description here

ItemsControl允许我们拥有相同类型的控件。在TextBox之后添加ItemsControl时,很遗憾会出现在新行上。因此,我不得不以某种方式在TextBox中附加ItemsControl和我的自定义控件。

<ItemsControl ItemsSource="{Binding MyItems}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">   
    <!--  Make items wrap  -->
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

    <!--  Custom control  -->
    <ItemsControl.ItemTemplate>
        <DataTemplate>

            <local:CustomControl />

        </DataTemplate>
    </ItemsControl.ItemTemplate>

</ItemsControl>

<!-- This should be inside items control -->
<TextBox />

我做了一些研究,结果证明我可以使用DataTemplateSelector类和ItemTemplateSelector,这样我就可以为不同的项目选择模板。

这当然是一个选项,但是它需要我将TextBox插入我的MyItems(这是ObservableCollection顺便说一句)。我不确定这是否是要走的路,因为我必须找到TextBox并在ObservableCollection的末尾移动它,每次添加新项目时......

所以问题是:解决这个问题的正确方法是什么?寻找有经验的开发者对此的看法。

1 个答案:

答案 0 :(得分:2)

您可以将ItemsSource设置为CompositeCollection

<ItemsControl ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ItemsControl.Resources>
        <CollectionViewSource x:Key="cvs" Source="{Binding MyItems}" />
    </ItemsControl.Resources>
    <ItemsControl.ItemsSource>
        <CompositeCollection>
            <CollectionContainer Collection="{Binding Source={StaticResource cvs}}" />
            <!-- This should be inside items control: -->
            <TextBox />
        </CompositeCollection>
    </ItemsControl.ItemsSource>
    <!--  Make items wrap  -->
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <!--  Custom control  -->
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <local:CustomControl />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>