Skip to content

Commit acd0f41

Browse files
Добавлена документация по пользовательской панели элементов (ItemsPanel). (#707)
Co-authored-by: Terentev A. A. <[email protected]>
1 parent 6cabe1a commit acd0f41

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
---
2+
description: КОНЦЕПЦИИ
3+
---
4+
5+
import ItemsControlCanvasScreenshot from '/img/concepts/itemscontrol-with-canvas.png';
6+
7+
# Пользовательская панель элементов (ItemsPanel)
8+
9+
Все элементы управления `ItemsControl` имеют панель-контейнер элементов, которая используется для компоновки их элементов. Возможно переопределить тип панели, используемой элементом управления, чтобы достичь пользовательских/альтернативных вариантов компоновки элементов в элементе управления. Этот документ предоставляет несколько примеров, демонстрирующих, как и зачем это делать.
10+
11+
- [`ItemsControl`](./../reference/controls/itemscontrol)
12+
- [`TreeView`](./../reference/controls/treeview-1)
13+
- [`Carousel`](./../reference/controls/carousel)
14+
- [`Menu`](./../reference/controls/menu)
15+
- [`ComboBox`](./../reference/controls/combobox)
16+
- [`ListBox`](./../reference/controls/listbox)
17+
18+
## Пример
19+
Этот пример связывает коллекцию Observable с `Rectangle` (на основе данных модели представления Tile) с элементом управления `ItemsControl`. ItemsControl.ItemPanel установлен на `Canvas`, и мы используем стиль для позиционирования `Rectangle` внутри `Canvas`.
20+
21+
```xml
22+
<ItemsControl ItemsSource="{Binding TileList}">
23+
<ItemsControl.ItemsPanel>
24+
<ItemsPanelTemplate>
25+
<Canvas Width="50" Height="50" Background="Yellow" Margin="3"/>
26+
</ItemsPanelTemplate>
27+
</ItemsControl.ItemsPanel>
28+
<ItemsControl.ItemTemplate>
29+
<DataTemplate>
30+
<Rectangle Fill="Green" Height="{Binding Size}" Width="{Binding Size}"/>
31+
</DataTemplate>
32+
</ItemsControl.ItemTemplate>
33+
<ItemsControl.Styles>
34+
<Style Selector="ContentPresenter" x:DataType="vm:Tile">
35+
<Setter Property="Canvas.Left" Value="{Binding TopX}"/>
36+
<Setter Property="Canvas.Top" Value="{Binding TopY}"/>
37+
</Style>
38+
</ItemsControl.Styles>
39+
</ItemsControl>
40+
```
41+
42+
```csharp title='C# Модель представления'
43+
using AvaloniaControls.Models;
44+
using System.Collections.Generic;
45+
using System.Collections.ObjectModel;
46+
47+
namespace AvaloniaControls.ViewModels
48+
{
49+
public class MainWindowViewModel
50+
{
51+
public ObservableCollection<Tile> TileList { get; set; }
52+
53+
public MainWindowViewModel()
54+
{
55+
TileList = new ObservableCollection<Tile>(new List<Tile>
56+
{
57+
new Tile(10, 10, 10),
58+
new Tile(10, 20, 20),
59+
new Tile(10, 30, 30),
60+
});
61+
}
62+
}
63+
}
64+
```
65+
66+
```csharp title='C# Класс элемента'
67+
public record Tile(int Size, int TopX, int TopY);
68+
```
69+
70+
<img src={ItemsControlCanvasScreenshot} alt="" />

0 commit comments

Comments
 (0)