2014-05-07 24 views
1

我想創建一個由兩條線組成的簡單交叉線。線應該有不同的顏色。我創建了一個繼承Shape的類。該類包含兩行並計算行的座標。我讀過,我必須實現DefiningGeometry屬性,如果我從形狀繼承。但是,我怎樣才能返回該屬性的get部分中的兩行?創建由多條單線組成的自定義形狀

在此先感謝。

+1

你爲什麼不使用路徑在其'Data'財產適當幾何?請參閱[這裏](http://msdn.microsoft.com/en-us/library/system.windows.shapes.path.data.aspx)。 – Clemens

+0

當你說「線應該有不同的顏色」,你的意思是十字架的兩條線? – Clemens

+0

是的。一條線應該是紅色的,另一條線是藍色的 – ooorndtski

回答

1

聽起來好像你可以使用CombinedGeometry Class來組合你的線條......唯一的是你需要使用LineGeometry類而不是Line s。你可以做這樣的事情(從鏈接CombinedGeometry頁面上MSDN):

<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF"> 
    <Path.Data> 

    <!-- Combines two geometries using the XOR combine mode. --> 
    <CombinedGeometry GeometryCombineMode="Xor"> 
     <CombinedGeometry.Geometry1> 
     <EllipseGeometry RadiusX="50" RadiusY="50" Center="75,75" /> 
     </CombinedGeometry.Geometry1> 
     <CombinedGeometry.Geometry2> 
     <EllipseGeometry RadiusX="50" RadiusY="50" Center="125,75" /> 
     </CombinedGeometry.Geometry2> 
    </CombinedGeometry> 
    </Path.Data> 
</Path> 

當然,你不會想和LineGeometry對象替換這些EllipseGeometry對象,但不應該是困難的,因爲它們具有類似的屬性。


UPDATE >>>

不幸的是,我不認爲你可以使用一個CombinedGeometry對象,其中包含不同顏色的幾何形狀......整個形狀必須與一個Brush畫。然而,你可能假兩種顏色巧妙地位於GradientStop s。此外,作爲@Clemens提到,也許GeometryGroup會更容易讓你使用...嘗試這樣的事:

<Path StrokeThickness="5" Fill="Blue" HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <Path.Data> 
     <GeometryGroup> 
      <LineGeometry StartPoint="50,0" EndPoint="50,100" /> 
      <LineGeometry StartPoint="0,50" EndPoint="100,50" /> 
     </GeometryGroup> 
    </Path.Data> 
    <Path.Stroke> 
     <LinearGradientBrush StartPoint="0,0" EndPoint="1,0"> 
      <GradientStop Color="LightGreen" Offset="0" /> 
      <GradientStop Color="LightGreen" Offset="0.475" /> 
      <GradientStop Color="Red" Offset="0.475" /> 
      <GradientStop Color="Red" Offset="0.525" /> 
      <GradientStop Color="LightGreen" Offset="0.525" /> 
      <GradientStop Color="LightGreen" Offset="0" /> 
     </LinearGradientBrush> 
    </Path.Stroke> 
</Path> 

,就像它是在兩行實際上是不同的顏色這Brush會出現:

enter image description here

然後,所有你需要做的是將它轉換成C#從DefiningGeometry財產歸還。請使用鏈接頁面上的示例以及MSDN上的GeometryGroup class頁面來幫助您解決這個問題。

+0

而'GeometryGroup'可能比'CombinedGeometry'更簡單(也更易於理解)。 – Clemens

+0

+1你是對的...這很容易。接得好。謝謝,我已經更新了我的答案。 – Sheridan

+0

謝謝你的回答。好的解決方案 – ooorndtski

1

你可以抓兩個不同顏色的線條由兩個GeometryDrawings的手段,用於填充矩形一個DrawingBrush:

<Rectangle Width="20" Height="20"> 
    <Rectangle.Fill> 
     <DrawingBrush> 
      <DrawingBrush.Drawing> 
       <DrawingGroup> 
        <GeometryDrawing Geometry="M0,-10 L0,10"> 
         <GeometryDrawing.Pen> 
          <Pen Brush="Blue" Thickness="3"/> 
         </GeometryDrawing.Pen> 
        </GeometryDrawing> 
        <GeometryDrawing Geometry="M-10,0 L10,0"> 
         <GeometryDrawing.Pen> 
          <Pen Brush="Red" Thickness="3"/> 
         </GeometryDrawing.Pen> 
        </GeometryDrawing> 
       </DrawingGroup> 
      </DrawingBrush.Drawing> 
     </DrawingBrush> 
    </Rectangle.Fill> 
</Rectangle>