WPF

2014-05-17 11 views
5

में एलीप्स के केवल हिस्सों को ब्रश करें मुझे नीचे दिए गए आकार को आकर्षित करने का सबसे अच्छा तरीका खोजने में समस्या हो रही है। मैं दृश्य परत पर Ellipse खींचने के लिए नीचे दिए गए कोड का उपयोग कर रहा हूं।WPF

लेकिन मैं केवल क्वार्टर ब्रश कैसे कर सकता हूं? मुझे लगता है कि यह LinearGradientBrush या RadialGradientBrush का उपयोग करके किया जा सकता है लेकिन मुझे नहीं पता कि इसका उपयोग कैसे किया जाता है।

var cntrpoint = space.FlipYAxis(x2, y2); 
dc.DrawEllipse(Brushes.Transparent, pen, cntrpoint, 30, 30); 

enter image description here

उत्तर

3
इस तरह

:

var geometry = new GeometryGroup(); 
geometry.Children.Add(new RectangleGeometry(new Rect(1, 0, 1, 1))); 
geometry.Children.Add(new RectangleGeometry(new Rect(0, 1, 1, 1))); 
var drawing = new GeometryDrawing(Brushes.Black, null, geometry); 
var brush = new DrawingBrush(drawing); 

dc.DrawEllipse(brush, pen, cntrpoint, 30, 30); 
+0

आपको बहुत धन्यवाद क्लेमेंस। क्या आप कृपया मुझे बता सकते हैं कि 'आयताकार जीमेट्री' क्या कर रहा है? मुझे उस हिस्से को समझने में मुश्किल हो रही है। – Vahid

+1

दो आयताकार जीमेट्रीज़ (चौड़ाई और ऊंचाई '1') 2x2 ग्रिड के निचले बाएं और ऊपरी दाएं चतुर्भुज को भरें। इसलिए (रिश्तेदार) निर्देशांक '(1, 0)' और '(0, 1)'। – Clemens

+0

यह उत्तर वास्तव में सुरुचिपूर्ण है। धन्यवाद। – Vahid

1

मैं एक समाधान पाया XAML में यह करने के लिए
(इस पोस्ट से प्रेरित: https://stackoverflow.com/a/5670388/3047078):

<Image Width="200" Height="200" Margin="20"> 
    <Image.Source> 
    <DrawingImage> 
     <DrawingImage.Drawing> 
     <DrawingGroup> 

      <GeometryDrawing Brush="Black"> 
      <GeometryDrawing.Pen> 
       <Pen Brush="Black" /> 
      </GeometryDrawing.Pen> 
      <GeometryDrawing.Geometry> 
       <PathGeometry> 
       <PathFigure StartPoint="100,100"> 
        <PathFigure.Segments> 
        <LineSegment Point="100,0"/> 
        <ArcSegment Point="200,100" SweepDirection="Clockwise" Size="100,100"/> 
        <LineSegment Point="100,100"/> 
        </PathFigure.Segments> 
       </PathFigure> 
       </PathGeometry> 
      </GeometryDrawing.Geometry> 
      </GeometryDrawing> 

      <GeometryDrawing Brush="White"> 
      <GeometryDrawing.Pen> 
       <Pen Brush="Black"/> 
      </GeometryDrawing.Pen> 
      <GeometryDrawing.Geometry> 
       <PathGeometry> 
       <PathFigure StartPoint="200,100"> 
        <PathFigure.Segments> 
        <ArcSegment Point="100,200" SweepDirection="Clockwise" Size="100,100"/> 
        <LineSegment Point="100,100"/> 
        </PathFigure.Segments> 
       </PathFigure> 
       </PathGeometry> 
      </GeometryDrawing.Geometry> 
      </GeometryDrawing> 

      <GeometryDrawing Brush="Black"> 
      <GeometryDrawing.Pen> 
       <Pen Brush="Black"/> 
      </GeometryDrawing.Pen> 
      <GeometryDrawing.Geometry> 
       <PathGeometry> 
       <PathFigure StartPoint="100,100"> 
        <PathFigure.Segments> 
        <LineSegment Point="100,200"/> 
        <ArcSegment Point="0,100" SweepDirection="Clockwise" Size="100,100"/> 
        <LineSegment Point="100,100"/> 
        </PathFigure.Segments> 
       </PathFigure> 
       </PathGeometry> 
      </GeometryDrawing.Geometry> 
      </GeometryDrawing> 

      <GeometryDrawing Brush="White"> 
      <GeometryDrawing.Pen> 
       <Pen Brush="Black"/> 
      </GeometryDrawing.Pen> 
      <GeometryDrawing.Geometry> 
       <PathGeometry> 
       <PathFigure StartPoint="100,100"> 
        <PathFigure.Segments> 
        <LineSegment Point="0,100"/> 
        <ArcSegment Point="100,0" SweepDirection="Clockwise" Size="100,100"/> 
        </PathFigure.Segments> 
       </PathFigure> 
       </PathGeometry> 
      </GeometryDrawing.Geometry> 
      </GeometryDrawing> 

     </DrawingGroup> 
     </DrawingImage.Drawing> 
    </DrawingImage> 
    </Image.Source> 
</Image> 
+0

धन्यवाद फ्लैट है, यह काम करता है लेकिन क्या मैं चाहता हूँ एक समाधान को लागू करने वाली एक 'Brush' है। मैं इसे अलग ज्यामिति के संयोजन नहीं करना चाहता हूं। – Vahid

1

आप ऐसा कर सकते हैं DrawingBrush और GeometryDrawing

का उपयोग कर
<Ellipse Width="300" Height="300" Stroke="DarkGray" StrokeThickness="1.5"> 
    <Ellipse.Fill> 
     <DrawingBrush> 
      <DrawingBrush.Drawing> 
       <GeometryDrawing> 
        <GeometryDrawing.Brush> 
         <RadialGradientBrush> 
          <GradientStop Color="Black" Offset="1.0" /> 
          <GradientStop Color="White" Offset="1.0" /> 
         </RadialGradientBrush> 
        </GeometryDrawing.Brush> 
        <GeometryDrawing.Geometry> 
         <GeometryGroup> 
          <RectangleGeometry Rect="0,0,50,50" /> 
          <RectangleGeometry Rect="50,50,50,50" /> 
         </GeometryGroup> 
        </GeometryDrawing.Geometry> 
       </GeometryDrawing> 
      </DrawingBrush.Drawing> 
     </DrawingBrush> 
    </Ellipse.Fill> 
</Ellipse> 

आउटपुट:

enter image description here

+0

धन्यवाद, मुझे नहीं पता कि यह मेरी स्थिति में कैसे अनुकूलित किया जाए। क्योंकि मैं पीछे कोड में अंडाकार खींच रहा हूँ। – Vahid