2016-03-24 4 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' вы пытались просто использовать его как значение Setter ''? – dkozl

+0

Если я установил значение setter, это не позволит добавить что-либо к user109260

+1

Вы можете установить каждое свойство только один раз за команду. Что еще вы пытаетесь поставить там? Не видите ли значение setter с 'DrawingBrush' вашей целью? – 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 игнорируется, как только вы используете Set Fill Setter. dkozl уже имеет statet: свойство Fill можно установить только один раз. – Pollitzer

+0

Я хочу объединить две монтажные щетки вместе, одна находится внутри ICON_STYLE, а другая - ICON_BRUSH. Если я использовал BasedOn, ICON_STYLE игнорируется, и я получаю только ICON_BRUSH. Здесь ICON_STYLE дает круг в качестве вывода, а ICON_BRUSH добавляет форму алмаза поверх круга. Благодарю. – user109260

Смежные вопросы