我試圖將一些WinForm代碼轉換爲WPF管道網絡繪圖應用程序。我一直立足而過這種塗料的應用文章:WPF渲染事件不繪製任何東西
http://www.codeproject.com/Articles/22776/WPF-DrawTools
這是我在WinForms和我試圖把它轉換了,因爲我們需要更加個性化的窗口。我需要做到以下幾點:
a)單擊畫布繪製節點 b)單擊並拖動上述節點 C)將鼠標懸停在和突出節點 d)與鏈路連接節點
我有以下代碼在畫布上繪製矩形,但在渲染渲染時畫布上不會顯示任何內容。我相對確定它被解僱了,因爲在其中放置一個消息框會導致程序崩潰。
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Colors.LimeGreen;
Pen myPen = new Pen(Brushes.Blue, 10);
Rect myRect = new Rect(50, 50, 500, 500);
drawingContext.DrawRectangle(mySolidColorBrush, myPen, myRect);
}
private void myCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
System.Windows.Forms.MessageBox.Show("click event fired");
DrawingVisual vs = new DrawingVisual();
DrawingContext dc = vs.RenderOpen();
OnRender(dc);
}
「被激活」消息框就在那裏,以確保點擊事件觸發,並且確實如此。 XML:
<TabItem Header="View Results">
<Canvas Background="WhiteSmoke" Name="myCanvas" MouseDown="myCanvas_MouseDown" >
</Canvas>
</TabItem>
什麼給了?文章中的傢伙使用用戶控件...這就是爲什麼我有問題嗎? WPF讓我感到瘋狂......我覺得我正在做一些完全錯誤的事情,但是我可以在這個主題上找到很少的文檔。
你顯然每個鼠標按下事件創建一個新的DrawingVisual - 是你的實際代碼? – ChrisF 2013-03-14 23:03:33
'WPF讓我瘋狂......' - 那是因爲你使用WPF以winforms的方式。爲什麼在這個世界上你會搞亂'OnRender()'??。請張貼你需要的截圖,我們可以給你一個正確的方法來在XAML中做到這一點。還記得我告訴過你不要在代碼中操縱UI元素嗎?還記得我還告訴過你,你需要「以一種抽象的方式來思考你的UI」嗎? – 2013-03-14 23:03:45
更新...我認爲主要適用於更新菜單。我有很多麻煩理解如何不... – 2013-03-14 23:11:56