2017-01-12 72 views
1

我需要用GDI圖形在WPF中的表單上繪製一個圓。 我不能用windows窗體來做到這一點,所以我添加了一個使用。 我無法使用WPF的Elipse控件。我的老師告訴我這樣做。在WPF上用GDI圖形繪製圓形

這是我的代碼:

public void MakeLogo() 
{ 
    System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Green); 
    System.Drawing.Graphics formGraphics = this.CreateGraphics(); 
    formGraphics.FillEllipse(myBrush, new System.Drawing.Rectangle(0, 0, 200, 300)); 
    myBrush.Dispose(); 
    formGraphics.Dispose(); 
} 

這是錯誤:

MainWindow' does not contain a definition for 'CreateGraphics' and no extension method 'CreateGraphics' accepting a first argument of type 'MainWindow' could be found (are you missing a using directive or an assembly reference?)

+0

「我需要用GDI圖形繪製的窗體上圓WPF」。是什麼原因?爲什麼你不能使用WPF Ellipse控件? – Clemens

+0

這是我的任務的要求之一。我不知道爲什麼我的老師想要這個。 @Clemens – Gigitex

+1

我猜你誤解了這個任務,你應該在WinForms中這樣做。 – LarsTech

回答

2

你不能在WPF使用GDI直接,以達到你所需要的,請使用WindowsFormsHost。添加到System.Windows.Forms的WindowsFormsIntegration程序和參考文獻,將其添加到XAML這樣的(應該有東西在裏面,比如面板或其他):

<Window x:Class="WpfApplication1.MainWindow" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
       xmlns:local="clr-namespace:WpfApplication1" 
       mc:Ignorable="d" 
       xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
       Title="MainWindow" Height="350" Width="525"> 
     <!--whatever goes here--> 
     <WindowsFormsHost x:Name="someWindowsForm"> 
      <wf:Panel></wf:Panel> 
     </WindowsFormsHost> 
     <!--whatever goes here--> 
    </Window> 

那麼你的代碼隱藏看起來就像這樣,你就可以OK

SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Green); 
    Graphics formGraphics = this.someWindowsForm.Child.CreateGraphics(); 
    formGraphics.FillEllipse(myBrush, new System.Drawing.Rectangle(0, 0, 200, 300)); 
    myBrush.Dispose(); 
    formGraphics.Dispose(); 

UPD:好主意,利用using聲明這裏的:

using (var myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Green)) 
      { 
       using (var formGraphics = this.someForm.Child.CreateGraphics()) 
       { 
        formGraphics.FillEllipse(myBrush, new System.Drawing.Rectangle(0, 0, 200, 300)); 
       } 
      }