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