Добавить больше моего контейнера usercontrol или отображения коллекции usercontrol - PullRequest
1 голос
/ 21 ноября 2011

Я не знаю, как будет вызван контейнер / элемент управления, который я ищу, поэтому я не могу его найти.

Добавить больше того же Usercontrol Usercontrol

enter image description here

  • Нажатие на + добавит новый экземпляр My Usercontrol справа от существующих
  • Нажатие на X приведет к удалению пользовательского элемента управления, на который была нажата
  • Я на самом деле не ищу элемент управления вкладками, который бы помещал каждый новый экземпляр на новую вкладку, но если больше ничего нет, он может подойти.
  • Дизайн не должен быть таким, как показано на изображении, очевидно, изображение просто иллюстрирует основную идею

Какие-либо предложения по ключевым словам / именам или ссылки на существующие реализации?

например. Может быть, есть стиль, который превращает ListBox в нечто подходящее?

Ответы [ 3 ]

2 голосов
/ 21 ноября 2011

Я бы использовал ItemsControl и настроил бы его ItemsPanelTemplate на то, что вы хотите.

ItemsControls предназначены для итерации коллекции объектов и отображения их в любой форме.Я написал несколько простых примеров кода из них здесь , если вам интересно, или вот еще один быстрый пример:

<DockPanel x:Name="RootPanel">
    <Button Style="{StaticResource AddButtonStyle}"
            DockPanel.Dock="Right" VerticalAlignment="Center"
            Command="{Binding AddItemCommand" />

    <ScrollViewer>
        <ItemsControl ItemsSource="{Binding MyCollection}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>

            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <local:MyUserControl />

                        <Button Style="{StaticResource RemoveButtonStyle}"
                            Command="{Binding ElementName=RootPanel, Path=DataContext.RemoveItemCommand}"
                            CommandParameter="{Binding }"
                            HorizontalAlignment="Left" VerticalAlignment="Top" />
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>
</DockPanel>

Ваш ItemsControl будет связан с ObservableCollection объектовВаши кнопки Добавить / Удалить просто добавят / удалят элементы из этой коллекции.Поскольку это ObservableCollection, он будет уведомлять пользовательский интерфейс об изменении коллекции и автоматически обновлять.

1 голос
/ 21 ноября 2011

Вы можете посмотреть на то, что называется элементом управления каруселью, который использует список объектов за ним и отображает их аналогично itunes. Это может быть немного чрезмерно, но это одно из решений. Пример можно увидеть здесь

Если это слишком сложно для ваших нужд, может ли это быть просто панель стека с полосой прокрутки, которая привязана к списку ваших пользовательских элементов управления?

1 голос
/ 21 ноября 2011

Вы действительно можете использовать ListBox и установить его ItemTemplate и ItemsPanelTemplate:

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"></StackPanel>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Label Content="{Binding Name}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Конечно, ваш ItemTemplate будет ссылкой на ваш элемент управления.

...