2017-01-12 9 views
1

Zeichnung muss ich mit GDI Grafiken einen Kreis auf meiner Form in WPF ziehen. Ich kann dies nicht mit Windows Forms, also habe ich eine Verwendung hinzugefügt. Ich kann die Elipse-Steuerelemente von WPF nicht verwenden. Mein Lehrer hat mir gesagt, dass ich das so machen soll.einen Kreis mit GDI Grafiken auf WPF

Dies ist mein Code:

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(); 
} 

Und das ist der Fehler:

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

"ich muss mit GDI Grafiken einen Kreis auf meiner Form in WPF ziehen". Aus welchem ​​Grund? Warum können Sie kein WPF-Ellipsen-Steuerelement verwenden? – Clemens

+0

Es ist eine der Anforderungen meines Auftrags. Ich weiß nicht, warum mein Lehrer das will. @ Clemens – Gigitex

+1

Ich vermute, Sie haben diese Aufgabe missverstanden und Sie sollten dies in WinForms tun. – LarsTech

Antwort

2

Sie können nicht direkt verwenden GDI in WPF, zu erreichen, was Sie brauchen, bitte WindowsFormsHost verwenden. Fügen Sie Verweise auf System.Windows.Forms und WindowsFormsIntegration, fügen Sie es wie folgt XAML (sollte etwas in haben, wie Panels oder was auch immer):

<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> 

Dann wird Ihr Code-Behind wird so aussehen, und Sie werden 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: gute Idee Verwendung von using Aussage machen hier:

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