pkr*_*298 8 c# data-binding wpf xaml mouse-position
有没有办法绑定到XAML文件中的WPF中的鼠标位置?或者这必须在代码中完成吗?我在Canvas中有一个控件,我只想让控件在鼠标光标位于Canvas中时跟随鼠标.
谢谢
编辑:
好吧,我认为使用代码隐藏文件相对简单.我在Canvas上添加了一个MouseMove事件处理程序,然后添加:
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
// Get the x and y coordinates of the mouse pointer.
System.Windows.Point position = e.GetPosition(this);
double pX = position.X;
double pY = position.Y;
// Sets the position of the image to the mouse coordinates.
myMouseImage.SetValue(Canvas.LeftProperty, pX);
myMouseImage.SetValue(Canvas.TopProperty, pY);
}
Run Code Online (Sandbox Code Playgroud)
使用http://msdn.microsoft.com/en-us/library/ms746626.aspx作为指导.
我试图为此目的制作一种装饰器.您将对象,鼠标位置包裹在您想要控制的位置上,并将某些控件绑定到装饰器MousePosition属性.
public class MouseTrackerDecorator : Decorator
{
static readonly DependencyProperty MousePositionProperty;
static MouseTrackerDecorator()
{
MousePositionProperty = DependencyProperty.Register("MousePosition", typeof(Point), typeof(MouseTrackerDecorator));
}
public override UIElement Child
{
get
{
return base.Child;
}
set
{
if (base.Child != null)
base.Child.MouseMove -= _controlledObject_MouseMove;
base.Child = value;
base.Child.MouseMove += _controlledObject_MouseMove;
}
}
public Point MousePosition
{
get
{
return (Point)GetValue(MouseTrackerDecorator.MousePositionProperty);
}
set
{
SetValue(MouseTrackerDecorator.MousePositionProperty, value);
}
}
void _controlledObject_MouseMove(object sender, MouseEventArgs e)
{
Point p = e.GetPosition(base.Child);
// Here you can add some validation logic
MousePosition = p;
}
}
Run Code Online (Sandbox Code Playgroud)
和XAML
<local:MouseTrackerDecorator x:Name="mouseTracker">
<Canvas Width="200" Height="200" Background="Red">
<Button Width="20" Height="20" Canvas.Left="{Binding ElementName=mouseTracker, Path=MousePosition.X}" Canvas.Top="{Binding ElementName=mouseTracker, Path=MousePosition.Y}" />
</Canvas>
</local:MouseTrackerDecorator>
Run Code Online (Sandbox Code Playgroud)