0

在这里失去理智。过去几天我在 WinForms 中编写了一个 Windows 应用程序的开始......昨天做了 90 度大转弯,出于审美原因不得不切换到 WPF。在转换某些东西时遇到了一些麻烦......即任何与图形相关的东西。在 wpf 版本中,我使用以下 C# 代码在用户单击面板的位置创建了一个黑色圆圈和白色矩形,并显示一个消息框,显示 x 坐标是什么:

Graphics g;

private void panel1_MouseClick(object sender, MouseEventArgs e)
    {
        SolidBrush s2 = new SolidBrush(Color.Black);
        g.FillRectangle(s2, e.X + 3, e.Y + 3, 10, 10);
        SolidBrush s = new SolidBrush(Color.White);
        g.FillPie(s, e.X + 4, e.Y + 4, 7, 7, 0, 360);

        float x_cord = e.X;
        MessageBox.Show("X is:  " + x_cord.ToString());
    }

我尝试通过以下代码在 wfb 中执行此操作:

 Graphics g;
    private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        System.Windows.Point position = e.GetPosition(this);
        double pX = position.X;
        double pXint = Convert.ToInt32(pX);
        MessageBox.Show(pX.ToString());
        SolidBrush s2 = new SolidBrush(System.Drawing.Color.Black);
        g.FillRectangle(s2, pXint, 5, 10, 10);
    }

这可以正确编译并运行,但是当我单击画布时,什么也没有发生!消息框主要用于测试事件是否正在触发,显然不是。这是其中包含画布的窗口的相应 XML:

<Grid>
        <Canvas Name="Surface" Height="Auto" Width="Auto" Background="White"> </Canvas>
    </Grid>

我在这里做错了什么?实际上,在大多数情况下,我实际上更喜欢 WPF,但某些事情绝对令人讨厌。

4

2 回答 2

2

问题是您试图将System.Drawing对象绘制到 WPF 上Canvas,您不能这样做。

解决此问题的一种方法是向Rectangles您添加Canvas.

<Grid>
    <Canvas Name="Surface" Height="Auto" Width="Auto" Background="White" MouseLeftButtonDown="Surface_MouseLeftButtonDown"></Canvas>
</Grid>


private void Surface_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Rectangle rect = new Rectangle { Width = 10, Height = 10, Fill = Brushes.Black };
    Surface.Children.Add(rect);
    Canvas.SetLeft(rect, e.GetPosition(this).X);
    Canvas.SetTop(rect, e.GetPosition(this).Y);
}
于 2013-02-14T23:36:29.920 回答
1

知道了。不敢相信我花了 6 个小时才画了一个矩形。不完全确定是什么使它起作用,但认为它必须与摆脱某些原因有关。using System.Drawing; 当我尝试 sa_ddam213 的代码时,我收到一条错误消息,说“无法从 System.Drawing.Rectangle 转换为 System.Windows.UIElement”,原因不明。在谷歌搜索号 5007 之后,我看到了这篇文章:

http://msdn.microsoft.com/en-us/library/ms747393.aspx

我以前看过它,但无法为直线或椭圆编译代码,我认为这是 System.Drawing 程序集导致问题。

非常感谢大家的帮助!!

于 2013-02-15T19:18:50.483 回答