Я использую 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 на кнопке. Это работает как чудо, и кнопка помещается на 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.Left в самом ContentPresenter? Или есть другой способ решить эту проблему?
Спасибо всем!