Можно интересоваться FAQ Linux для clock_gettime(CLOCK_REALTIME)
Я понимаю, что здесь уже есть принятый ответ, но способ достичь первоначальной цели, не вмешиваясь в поля, - это создать собственный ItemsControl и переопределить метод PrepareContainerForItemOverride. В этом методе привязка устанавливается в коде.
public class CustomItemsCollection
: ItemsControl
{
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
FrameworkElement contentitem = element as FrameworkElement;
Binding leftBinding = new Binding("Left"); // "Left" is the property path that you want to bind the value to.
contentitem.SetBinding(Canvas.LeftProperty, leftBinding);
base.PrepareContainerForItemOverride(element, item);
}
}
Вы правы, ContentPresenter вставлен между Canvas и Rectangle.
Один из способов обхода - установить левое поле вместо Canvas.Left
:
<Rectangle Stroke="LightGray" Fill="Black" StrokeThickness="2"
RadiusX="15" RadiusY="15" Height="25" Width="25">
<Rectangle.Margin>
<Thickness Left="{Binding XAxis}"/>
</Rectangle.Margin>
</Rectangle>
Добавьте следующее в свой ItemsControl
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="Canvas.Left" Value="{Binding XPath=XAxis}"/>
</Style>
</ItemsControl.ItemContainerStyle>
Нет необходимости в каких-либо пользовательских элементах управления
Вы не можете использовать ItemsControl.ItemContainerStyle
в Silverlight. Его не существует. Он существует только на нескольких классах конечного уровня, таких как сам ListBox
.