1

我有一个简单的程序,它实现了这个问题中讨论的代码来跟踪鼠标移动。但是,似乎只有在设置 Canvas 控件的背景颜色时才会触发事件。

XAML(设置了背景颜色):

<Window x:Class="SimplePaint.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="501" Width="784">
    <Grid>
        <Canvas Height="402" HorizontalAlignment="Left" Margin="12,12,0,0" Name="PaintCanvas" VerticalAlignment="Top" Width="738" MouseDown="PaintCanvas_MouseDown" MouseMove="PaintCanvas_MouseMove" MouseUp="PaintCanvas_MouseUp" Background="#FFDEF4FF">
            <Polyline x:Name="polyline" Stroke="Black" StrokeThickness="3"/>
        </Canvas>
    </Grid>
</Window>

C#:

private bool drawing = false;

private void PaintCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
    this.drawing = true;
}

private void PaintCanvas_MouseMove(object sender, MouseEventArgs e)
{
   if (this.drawing)
        polyline.Points.Add(e.GetPosition(this.PaintCanvas));
}

private void PaintCanvas_MouseUp(object sender, MouseButtonEventArgs e)
{
    this.drawing = false;
}

此代码有效。但是,如果我Background="#FFDEF4FF"从 XAML 中删除,则在使用该程序时不会发生任何事情。在事件处理程序中设置断点表明它们不会触发。

4

1 回答 1

2

您是否为背景尝试过“透明”……否则您的 Background=null(即没有背景)……并且 WPF 的 HitTesting 逻辑不会击中您的对象。

有关说明,请参见此处:

于 2012-08-24T18:28:11.123 回答