В одном из наших проектов нам бы хотелось иметь элемент управления календаря, который бы выглядел как календарь Outlook в недельном режиме, то есть по одной строке в день в течение 7 дней за один раз. В этом календаре мы добавляем ресурсы (т.е. объекты) на полчаса или более, и они будут отображаться в календаре.
Какой элемент управления лучше всего использовать в WPF для разработки такого элемента управления и почему? Я думал о простом просмотре списка с довольно сложным шаблоном элемента, но мне было интересно, можно ли использовать что-то более простое.
Спасибо
Редактировать: Я забыл упомянуть, что, скорее всего, я буду реализовывать перетаскивание для перетаскивания ресурсов в календарь и, возможно, если позволит время, для перемещения внутри самого календаря. Однако я не верю, что это сильно повлияет на выбор элемента управления, поскольку я считаю, что каждый элемент управления можно сделать сбрасываемым.
Редактировать: вот что у меня есть:
<ItemsControl x:Name="ICPlanification" Grid.Column="1">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="20" />
<RowDefinition Height="20" />
<RowDefinition Height="20" />
<RowDefinition Height="20" />
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Grid.Row="{Binding GridRow}" Grid.RowSpan="{Binding ColSpan}" Grid.Column="{Binding GridCol}" Grid.ColumnSpan="{Binding ColSpan}" CornerRadius="0" BorderBrush="White" BorderThickness="1" Background="{Binding ColorBackground}" Panel.ZIndex="{Binding ZIndex}">
<TextBlock TextWrapping="Wrap" Text="{Binding Description}" ></TextBlock>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Я думал, что это сработает, но все элементы помещаются в первый ряд и столбец, что делает невозможным размещение сетки в ItemPanal.
И прежде чем кто-либо спросит, да, переменные GridRol и GridCol имеют правильные значения в моем списке.
Просматривая некоторые форумы, я кое-что выяснил, и это сработало!
<ItemsControl.Resources>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="Grid.Column" Value="{Binding Path=Column}" />
<Setter Property="Grid.Row" Value="{Binding Path=Row}" />
</Style>
</ItemsControl.Resources
Вот объяснение, которое он дал:
"Проблема, с которой все сталкиваются в Grid и динамическом связывании Row и Column, заключается в том, что ItemsControl оборачивает каждый элемент в ContentPresenter, поэтому привязка Grid.Row и Grid.Column в DataTemplate игнорируется, и поскольку Свойства Grid.Row и Grid.Column в сгенерированном ContentPresenter не устанавливаются, тогда каждый элемент располагается поверх друг друга в столбце 0, строке 0. Это можно обойти, установив следующий стиль на ItemsControl. "