Silverlight 3 - 数据绑定矩形在画布上的位置

Blo*_*nty 5 c# data-binding silverlight-2.0 silverlight-3.0

我目前正在尝试使用ItemsControl将一组对象绑定到Silverlight 3中的Canvas,如下所示:

<ItemsControl x:Name="ctrl" ItemsSource="{Binding myObjectsCollection}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas></Canvas>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle Stroke="LightGray" Fill="Black"  StrokeThickness="2" 
                   RadiusX="15" RadiusY="15" Canvas.Left="{Binding XAxis}"
                   Height="25" Width="25">
            </Rectangle>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

不幸的是,似乎Canvas.Left上的绑定被忽略了.根据我在这里学到的东西,这似乎是由于项目被放置在内容展示器内而不是我在项目面板中指定的实际画布.

有没有办法可以使用数据绑定来确定画布上元素的位置?

Tom*_*Tom 7

我意识到这已经接受了答案,但是在不弄乱边距的情况下实现初始目标的方法是创建自定义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);
    }

}
Run Code Online (Sandbox Code Playgroud)