Как создать пользовательский список в Blend

#c# #wpf #listbox #blend

#c# #wpf #listbox #смешать

Вопрос:

Я новичок в Blend и WPF, и я хотел бы иметь элемент управления, который имеет свойства типа ListBox, но с моими собственными пользовательскими элементами. По сути, я хочу, чтобы каждый элемент представлял собой закругленный прямоугольник с меткой. Первым способом, о котором я подумал, было использование UserControl и StackPanel, хотя я не мог придумать, как сообщить программе, какие объекты имеют фокус. По этой причине я подумал, что мог бы использовать ListBox и, следовательно, создать пользовательский элемент ListBoxItem, но, очевидно, в элемент управления можно преобразовать только прямоугольник, потеряв метку.. Любые указатели были бы отличным подспорьем.

Ответ №1:

Вы можете использовать ListBox, и вы не ограничены только прямоугольником, а не меткой.

Используйте стандартный ListBox и создайте ListBox.ItemTemplate настолько сложный, насколько вам нравится. Если вам нужно наложить кучу элементов управления друг на друга, вы можете начать с элемента управления Canvas или Grid и перейти оттуда.

С другой стороны, вы могли бы просто сделать шаблон элемента одним элементом управления Label (если логически элемент ведет себя как label) и использовать ControlTemplate, чтобы полностью переделать визуальное дерево, отображаемое для этих меток.

Ссылки:

  1. ItemTemplate

  2. ControlTemplate

Вот краткий пример.

XAML:

 <Grid>
    <ListView ItemsSource="{Binding Path=Labels}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Rectangle Fill="CadetBlue" RadiusX="10" RadiusY="10" SnapsToDevicePixels="True">
                    </Rectangle>
                    <Label Content="{Binding}" Padding="10"/>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>
  

«ViewModel»:

     public IEnumerable<string> Labels
    {
        get { return new string[] { "Foo", "Bar", "Baz" }; }
    }
  

И результат:

Вывод