.net 在WPF中绑定画布中UserControl的位置和大小

.net 在WPF中绑定画布中UserControl的位置和大小,.net,wpf,data-binding,wpf-controls,binding,.net,Wpf,Data Binding,Wpf Controls,Binding,我们需要动态创建(即在运行时,通过代码隐藏)用户控件,并将它们放置在画布上。 我们希望将这些可大小(!)和可拖动(!)用户控件的位置(Canvas.Left和Canvas.Top)和宽度绑定到一个可观察集合。这意味着当用户拖动或调整控件大小时,数据源会自动更新 如果Usercontrol包含在DataTemplate中,而DataTemplate又由DataContext设置为要绑定到的集合的ListBox使用,我们将如何实现这一点 换句话说,我们如何绑定XAML中不存在的控件的位置和大小,而只

我们需要动态创建(即在运行时,通过代码隐藏)用户控件,并将它们放置在画布上。 我们希望将这些可大小(!)和可拖动(!)用户控件的位置(Canvas.Left和Canvas.Top)和宽度绑定到一个可观察集合。这意味着当用户拖动或调整控件大小时,数据源会自动更新

如果Usercontrol包含在DataTemplate中,而DataTemplate又由DataContext设置为要绑定到的集合的ListBox使用,我们将如何实现这一点

换句话说,我们如何绑定XAML中不存在的控件的位置和大小,而只在代码中存在(因为它是通过单击并拖动鼠标创建的)

请注意,集合可以是空的,也可以不是空的,这意味着必须正确绑定存储在datasource中的大小和位置,以便可以通过数据绑定在画布中正确调整UserControl的大小和位置。
这可能吗?

您是否尝试过使用
模式=双向
绑定

<YourUserControl 
    Canvas.Top="{Binding TopProperty, Mode=TwoWay}" 
    Canvas.Left={Binding LeftProperty, Mode=TwoWay}" 
    Height="{Binding HeightProperty, Mode=TwoWay}" 
    Width="{Binding WidthProperty, Mode=TwoWay}" />

您是否尝试过使用
模式=双向
绑定

<YourUserControl 
    Canvas.Top="{Binding TopProperty, Mode=TwoWay}" 
    Canvas.Left={Binding LeftProperty, Mode=TwoWay}" 
    Height="{Binding HeightProperty, Mode=TwoWay}" 
    Width="{Binding WidthProperty, Mode=TwoWay}" />

谢谢你的帮助。这很有趣。在您的示例中,绑定中的TopProperty或LeftProperty是什么?这是Canvas.Left和Canvas.Top还是UserControl.Left和UserControl.Top?我还没能做到这一点,更不用说双向绑定了。经过更多的尝试和错误,这实际上是可行的。当mosue移动或调整UserControl的大小时,TwoWay将处理数据源。谢谢TopProperty和LeftProperty是数据源上要保持同步的属性。很高兴听到它成功了!谢谢你的帮助。这很有趣。在您的示例中,绑定中的TopProperty或LeftProperty是什么?这是Canvas.Left和Canvas.Top还是UserControl.Left和UserControl.Top?我还没能做到这一点,更不用说双向绑定了。经过更多的尝试和错误,这实际上是可行的。当mosue移动或调整UserControl的大小时,TwoWay将处理数据源。谢谢TopProperty和LeftProperty是数据源上要保持同步的属性。很高兴听到它成功了!