WPF画布内的鼠标位置

WPF画布内的鼠标位置,wpf,mouse,cursor-position,Wpf,Mouse,Cursor Position,我在WPF里做一个小小的颜色选择器。我有这个 <Border Background="Transparent" BorderBrush="Black" BorderThickness="2" SnapsToDevicePixels="

我在WPF里做一个小小的颜色选择器。我有这个

                <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);
        }