-
-
设置该对象的'FieldCoordX'和'FieldCoordY'属性,而不是设置'Canvas.LeftProperty属性'和'Canvas.RightProperty属性'的控制。
看起来是这样的:
private void Item1_MouseMove(object sender, MouseEventArgs e)
{
if (bIsCaptured)
{
FrameworkElement element = sender as FrameworkElement;
if (element != null)
{
ISquadPlayerViewModel vmPlayer = element.DataContext as ISquadPlayerViewModel;
if (vmPlayer != null)
{
// Calculate the current position of the object.
double deltaH = e.GetPosition(null).X - mouseHorizontalPosition;
double deltaV = e.GetPosition(null).Y - mouseVerticalPosition;
double newLeft = deltaH + vmPlayer.FieldCoordX;
double newTop = deltaV + vmPlayer.FieldCoordY;
// Set new position of object.
vmPlayer.FieldCoordX = newLeft;
vmPlayer.FieldCoordY = newTop;
}
// Update position global variables.
mouseVerticalPosition = e.GetPosition(null).Y;
mouseHorizontalPosition = e.GetPosition(null).X;
}
}
}
要添加到原始描述中的另一项,即承载所有控件的“ItemsControl”对象的自定义:
public class MyItemsControl : ItemsControl
{
protected override void PrepareContainerForItemOverride(
DependencyObject element, object item)
{
FrameworkElement contentitem = element as FrameworkElement;
if (contentitem != null)
{
Binding leftBinding = new Binding("FieldCoordX");
Binding topBinding = new Binding("FieldCoordY");
leftBinding.Mode = BindingMode.TwoWay;
topBinding.Mode = BindingMode.TwoWay;
contentitem.SetBinding(Canvas.LeftProperty, leftBinding);
contentitem.SetBinding(Canvas.TopProperty, topBinding);
base.PrepareContainerForItemOverride(element, item);
}
}
}
如果有人对更多细节感兴趣,可以问。我会尽力帮忙的。