2016-03-24 22 views
2

在我的XAML頁面,我有下面給出一個風格,一個drawingbrush -如何將兩種不同的樣式合併到一個xaml中?

<Style x:Key="ICON_STYLE" TargetType="Rectangle"> 
    <Setter Property="Fill"> 
     <Setter.Value> 
      <DrawingBrush Viewbox="0,0,39.125,39.125" ViewboxUnits="Absolute"> 
       <DrawingBrush.Drawing> 
        <GeometryDrawing Brush="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=uiEntityViews:BaseView}, Path=MeSiteColor}" Geometry="F1M19.5625,0.999954C29.8144,0.999954 38.125,9.31053 38.125,19.5625 38.125,29.8142 29.8143,38.1249 19.5625,38.1249 9.31073,38.1249 1,29.8142 1,19.5625 1,9.31053 9.31064,0.999954 19.5625,0.999954z"> 
         <GeometryDrawing.Pen> 
          <Pen DashCap="Square" EndLineCap="Flat" LineJoin="Round" MiterLimit="10" StartLineCap="Flat" Thickness="2"> 
           <Pen.Brush> 
            <LinearGradientBrush EndPoint="0.849422,0.849423" StartPoint="0.150577,0.150578"> 
             <GradientStop Color="#FF657783" Offset="0"/> 
             <GradientStop Color="White" Offset="0.146"/> 
             <GradientStop Color="#FF2C4758" Offset="1"/> 
            </LinearGradientBrush> 
           </Pen.Brush> 
           <Pen.DashStyle> 
            <DashStyle/> 
           </Pen.DashStyle> 
          </Pen> 
         </GeometryDrawing.Pen> 
        </GeometryDrawing> 
       </DrawingBrush.Drawing> 
      </DrawingBrush> 
     </Setter.Value> 
    </Setter> 
</Style> 




<DrawingBrush x:Key="ICON_BRUSH"> 
<DrawingBrush.Drawing> 
    <DrawingGroup> 
    <GeometryDrawing Brush="Gray" Geometry="F1 M0,25 L25,50, 50,25 25,0z"> 
     <GeometryDrawing.Pen> 
     <Pen DashCap="Triangle" EndLineCap="Flat" LineJoin="Bevel" MiterLimit="10" StartLineCap="Flat" Thickness="5"> 
      <Pen.Brush> 
      <LinearGradientBrush> 
       <GradientStop Color="Red" Offset="0"/> 
       <GradientStop Color="Green" Offset="1"/> 
      </LinearGradientBrush> 
      </Pen.Brush> 
      <Pen.DashStyle> 
      <DashStyle/> 
      </Pen.DashStyle> 
     </Pen> 
     </GeometryDrawing.Pen> 
    </GeometryDrawing> 
    </DrawingGroup> 
</DrawingBrush.Drawing> 

如何結合這兩種成一種風格。我嘗試了以下,但它沒有奏效。

<Style x:Key="COMBINED_NODE_ICON" TargetType="Rectangle" BasedOn="{StaticResource ICON_STYLE}"> 
<Setter Property="Fill"> 
    <Setter.Value> 
    <DrawingBrush TileMode="None"> 
     <DrawingBrush.Drawing> 
      <DrawingGroup> 
      <DrawingGroup.Transform> 
       <TranslateTransform X="0.2" Y="0.2" /> 
      </DrawingGroup.Transform> 
      <GeometryDrawing Brush="{StaticResource ICON_BRUSH}"> 
       <GeometryDrawing.Geometry> 
       <RectangleGeometry Rect="0,0,1,1" /> 
       </GeometryDrawing.Geometry> 
      </GeometryDrawing> 
     </DrawingGroup> 
     </DrawingBrush.Drawing> 
    </DrawingBrush> 
    </Setter.Value> 
</Setter> 

任何幫助將得到高度讚賞。謝謝。

+0

而不是'BasedOn'你嘗試只是使用它的最後一行as Setter value''? – dkozl

+0

如果我設置了setter值,它不會讓任何東西添加到 user109260

+1

每個命令只能設置一個屬性。你還有什麼想放在那裏的? 「DrawingBrush」沒有看到setter的價值嗎? – dkozl

回答

1

這應該工作(dkozl加BasedOn):

<Style x:Key="COMBINED_NODE_ICON" 
     TargetType="Rectangle" 
     BasedOn="{StaticResource ICON_STYLE}"> 
    <Setter Property="Fill" 
      Value="{StaticResource ICON_BRUSH}" /> 
</Style> 

BasedOn部分可以省略(純dkozl)只要你的基本樣式(ICON_STYLE)包含什麼,但FillSetter,因爲Fill財產在樣式COMBINED_NODE_ICON中被覆蓋。

而且你的代碼工作,如果添加的

<DrawingBrush x:Key="ICON_BRUSH"> 
    ... 
</DrawingBrush> 

的最後一行的

<Style x:Key="COMBINED_NODE_ICON" TargetType="Rectangle" BasedOn="{StaticResource ICON_STYLE}"> 
    ... 
</Style> 
+0

這不起作用。如果我這樣做,那麼只應用ICON_BRUSH並且ICON_STYLE丟失。 – user109260

+0

正如我所說的,在目前的情況下,如果您使用'BasedOn'或不是,因爲一旦您使用填充設置器,ICON_STYLE就會被忽略。 dkozl已經聲明:填充屬性只能設置一次。 – Pollitzer

+0

我想將兩個畫筆組合在一起,一個在ICON_STYLE中,另一個在ICON_BRUSH中。如果我使用BasedOn,ICON_STYLE將被忽略,並且只有ICON_BRUSH作爲輸出。這裏,ICON_STYLE給出一個圓作爲輸出,ICON_BRUSH在圓的頂部添加一個菱形。謝謝。 – user109260

相關問題