2013-02-14 77 views
0

在這裏失去了我的想法。我花了幾天的時間在WinForms上寫了一個Windows應用程序的開始......昨天做了一個90度轉向,並且出於美學原因不得不切換到WPF。在將某些東西轉換過來時遇到了一些麻煩......即與任何圖形相關在WPF版本,我有以下C#代碼創建所述點處的黑色圓圈和白色矩形發生用戶點擊在面板上,並顯示消息框顯示什麼的x座標是:在畫布上點擊點畫一個矩形wpf

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,但某些事情是絕對麻煩的。

+2

一個建議,可以讓你的生活變得更輕鬆:從你的項目中刪除所有對'System.Drawing'的引用。 WPF不使用也不關心該程序集,並且有很多與WPF類同名的類,這可能會造成很多混淆。 – 2013-02-14 23:44:23

回答

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

感謝您的回覆sa_ddamn。我得到「無法從System.Drawing.Rectangle轉換爲System.Windows.UIElement」,但是,我不能相信我正在努力繪製一個怪異的矩形! – 2013-02-15 16:31:48

1

明白了。不能相信我花了6個小時畫一個矩形。不完全確定是什麼讓它工作,但認爲它必須做些什麼來擺脫using System.Drawing;當我嘗試sa_ddam213的代碼時,我得到一個錯誤,說「不能從System.Drawing.Rectangle轉換爲System.Windows.UIElement」出於未知原因。此前谷歌搜索號5007我來到這個文章在:

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

我在這期待已久之前,但無法得到的代碼編譯爲線或elipse,我想這是系統。繪圖組件導致問題。

非常感謝您的幫助!