Я удивлен, что свойства Top / Left работают. Canvas рассматривает свои прямые потомки для вложенных свойств Top / Left / ZIndex. Если объект не принадлежит UIElement, Canvas обернет элемент в ContentPresenter (который становится прямым потомком Canvas). Поэтому Canvas будет смотреть на ContentPresenter, а не на элементы управления ZExtender или Displayer.
Элемент управления Displayer будет создан и добавлен как дочерний элемент ContentPresenter. Но это не зависит от Canvas.
Обычно вам нужно сделать что-то вроде:
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding Left}" />
<Setter Property="Canvas.Top" Value="{Binding Top}" />
<Setter Property="Canvas.ZIndex" Value="{Binding ZIndex}" />
</Style>
</ItemsControl.ItemContainerStyle>
Но Silverlight 4 не поддерживает привязки в сеттерах, подобных этому. Таким образом, вы должны применить привязки в коде позади. Предпочтительно в PrepareContainerForItemOverride .
Или вы можете попробовать обходной путь, описанный здесь .