Я использую ItemsControl, где ItemsPanel установлен на Холст (см. этот вопрос для большей справочной информации). ItemsControl работает, как я хочу, и он работает как очарование при добавлении дочернего элемента вручную путем помещения его в ItemsControl. Объекты:
Отметьте Холст. Оставленное свойство на Кнопке. Это работает как очарование, и Кнопка помещается 500 пикселей от левых левой стороны ItemsControl.Отлично!
Однако, Когда я определяю привязку ItemsSource к Списку, Canvas.left не имеет никакого эффекта:
Путем осмотра приложения в течение времени выполнения я вижу одно различие. Контейнерный ContentPresenter был добавлен между Холстом и кнопкой..
Как я могу установить Холст. Оставленное свойство на самом ContentPresenter? Или есть ли другой способ решить эту проблему?
Благодаря всем!
на ум приходит несколько решений:
Можно установить свойство Canvas.Left с помощью ItemContainerStyle:
<ItemsControl ItemsSource="{Binding Elements}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="Button Text" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="500" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>