0
我已经添加了自定义的拖动行为给TextBlock网格上如何绑定到translatetransform
的XAML
<Grid>
<TextBlock Text="{Binding Description}" >
<i:Interaction.Behaviors>
<flowfieldVisualiser:DragBehavior/>
</i:Interaction.Behaviors>
</TextBlock>
</Grid>
的行为
public class DragBehavior : Behavior<UIElement>
{
private Point _elementStartPosition;
private Point _mouseStartPosition;
private readonly TranslateTransform _transform = new TranslateTransform();
protected override void OnAttached()
{
AssociatedObject.RenderTransform = _transform;
AssociatedObject.MouseLeftButtonDown += AssociatedObject_MouseLeftButtonDown;
AssociatedObject.MouseLeftButtonUp += AssociatedObject_MouseLeftButtonUp;
AssociatedObject.MouseMove += AssociatedObject_MouseMove;
}
void AssociatedObject_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
var parent = Application.Current.MainWindow;
_elementStartPosition = AssociatedObject.TranslatePoint(new Point(), parent);
var vector = e.GetPosition(parent) - _elementStartPosition;
_mouseStartPosition = new Point(vector.X, vector.Y);
AssociatedObject.CaptureMouse();
}
void AssociatedObject_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
var parent = Application.Current.MainWindow;
_elementStartPosition = AssociatedObject.TranslatePoint(new Point(), parent);
var diff = e.GetPosition(parent) - _mouseStartPosition;
if (AssociatedObject.IsMouseCaptured)
{
_transform.X = diff.X;
_transform.Y = diff.Y;
}
}
void AssociatedObject_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
AssociatedObject.ReleaseMouseCapture();
}
}
该作品的代码好吧,我可以拖动文本框。问题是,我需要知道我的datacontext中的新值是什么。如何将TranslateTransform x和y绑定到我的数据上下文的x和y属性?
谢谢您的回答,但我会怎么做,通过XAML?在自定义行为中添加绑定感觉不对,我不想绑定到我仍然想要移动的其他控件。 – 2014-10-17 08:27:43
@JohnPetrak,由于要绑定的源(tansform)不在xaml中,因此可能无法在xaml中完成。但是,您可以使用其他附加行为来绑定相同的行为。顺便说一句,行为绑定没有任何错误,但具有不同的行为可能会帮助你分离代码。 – pushpraj 2014-10-17 08:36:07