У меня есть ItemsControl
с пользовательскими элементами управления, завернутыми внутрь. То, чего я хочу добиться - это всегда иметь элемент управления TextBox
вместе с моими пользовательскими элементами управления всегда в конце WrapPanel
.
Вот небольшой предварительный просмотр:

Наличие 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
, каждый раз, когда добавляется новый элемент ...
Итак, вопрос в том, как правильно решить эту проблему? Ищу мнение опытных разработчиков по этому поводу.