#c# #wpf #listbox #blend
#c# #wpf #listbox #смешать
Вопрос:
Я новичок в Blend и WPF, и я хотел бы иметь элемент управления, который имеет свойства типа ListBox, но с моими собственными пользовательскими элементами. По сути, я хочу, чтобы каждый элемент представлял собой закругленный прямоугольник с меткой. Первым способом, о котором я подумал, было использование UserControl и StackPanel, хотя я не мог придумать, как сообщить программе, какие объекты имеют фокус. По этой причине я подумал, что мог бы использовать ListBox и, следовательно, создать пользовательский элемент ListBoxItem, но, очевидно, в элемент управления можно преобразовать только прямоугольник, потеряв метку.. Любые указатели были бы отличным подспорьем.
Ответ №1:
Вы можете использовать ListBox, и вы не ограничены только прямоугольником, а не меткой.
Используйте стандартный ListBox и создайте ListBox.ItemTemplate настолько сложный, насколько вам нравится. Если вам нужно наложить кучу элементов управления друг на друга, вы можете начать с элемента управления Canvas или Grid и перейти оттуда.
С другой стороны, вы могли бы просто сделать шаблон элемента одним элементом управления Label (если логически элемент ведет себя как label) и использовать 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" }; }
}
И результат: