WPF画布内的鼠标位置
我在WPF里做一个小小的颜色选择器。我有这个WPF画布内的鼠标位置,wpf,mouse,cursor-position,Wpf,Mouse,Cursor Position,我在WPF里做一个小小的颜色选择器。我有这个 <Border Background="Transparent" BorderBrush="Black" BorderThickness="2" SnapsToDevicePixels="
<Border
Background="Transparent"
BorderBrush="Black"
BorderThickness="2"
SnapsToDevicePixels="True">
<Canvas x:Name="ColorPlaneCanvas"
Width="400"
Height="400"
Background="Transparent"
MouseLeftButtonDown="{s:Action PlanePositionChanged}"
MouseMove="{s:Action PlanePositionChanged}"
SnapsToDevicePixels="True">
<Ellipse x:Name="ColorPlane"
Canvas.Left="{Binding PlaneX}"
Canvas.Top="{Binding PlaneY}"
Width="10"
Height="10"
Fill="Transparent"
SnapsToDevicePixels="True"
Stroke="White"
StrokeThickness="2" />
</Canvas>
</Border>
我使用一个画布(在另一个画布上),其中包含一个小“平面”。当我在顶部画布上拖动鼠标时,平面的坐标会更新,因为调用了MouseLeftButtonDown
事件
但是如果我将鼠标移动到画布一侧(不是画布的任何一侧,而是包含元素的一侧),我仍然可以获得MouseLeftButtonDown
事件。
我可以做些什么来只在画布中获取鼠标事件
如果你想看到工件,这是一个工作版本。我做了一个类似的程序,告诉你鼠标在画布上的连线,如果你点击它画一条线,我会给你发送wpf和代码,看看是否有帮助,我使用一个点,它就工作了 WPF:
“画布的一面”?请澄清,各方面。上、下、左、右。它的大小似乎大于400px(我用XAML指定)
<Canvas x:Name="cnvPaper" Background="Aquamarine" Margin="30" MouseEnter="cnvPaper_MouseEnter" MouseLeave="cnvPaper_MouseLeave" MouseDown="cnvPaper_MouseDown" MouseMove="cnvPaper_MouseMove"/>
Point previousPoint;
private void cnvPaper_MouseEnter(object sender, MouseEventArgs e)
{
previousPoint = e.GetPosition(cnvPaper);
}
private void cnvPaper_MouseMove(object sender, MouseEventArgs e)
{
String cordsText = "X: " + e.GetPosition(cnvPaper).X + " - Y: " + e.GetPosition(cnvPaper).Y;
if (e.LeftButton == MouseButtonState.Pressed)
{
DrawLine(e.GetPosition(cnvPaper));
}
else if(e.RightButton == MouseButtonState.Pressed)
{
DrawCircle(e.GetPosition(cnvPaper));
}
previousPoint = e.GetPosition(cnvPaper);
}