2012-09-04 11 views
5

Sono abbastanza nuovo con il design WPF (e il design in generale) e ho bisogno di aiuto con un'attività.Creazione di un pulsante con grafica vettoriale nel contenuto

Ho uno stile per un pulsante che contiene alcuni dati in un percorso, che disegna un'icona su di esso (in pratica è semplice aggiungere una nuova icona). Ora vorrei farne un'icona di copia.

non riuscivo a trovare un modo per manipolare con il percorso che ho in Blend, quindi quello che avevo in mente era:

1) copia dei dati percorso in modo che possiamo trarre due icone (per avere due oggetti Percorso in Content) 2) Spostare prima un po 'a sinistra e in alto 3) Spostare secondo un po' a destra e in basso 4) Assicurarsi secondo sovrappongono primo

Questo è quello che ho fatto: Dal momento che non possiamo avere due elementi impostati per Contenuto, ho aggiunto un elemento Grid e all'interno ho copiato due volte l'elemento Path. Poi ho riposizionato entrambi i percorsi per simulare i dati duplicati.

<Setter Property="Content"> 
    <Setter.Value> 
    <Grid> 
      <Path Data="..." Margin="10" Stretch="Fill" Fill="{StaticResource IconBrush}" RenderTransformOrigin="0.5,0.4"> 
       <Path.RenderTransform> 
        <TransformGroup> 
       <ScaleTransform /> 
       <SkewTransform /> 
       <RotateTransform Angle="-90" /> 
       <TranslateTransform /> 
      </TransformGroup> 
     </Path.RenderTransform> 
    </Path> 
    <Path Data="..." Margin="10" Stretch="Fill" Fill="{StaticResource IconBrush}" RenderTransformOrigin="0.5,0.6"> 
       <Path.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform /> 
       <SkewTransform /> 
       <RotateTransform Angle="-90" /> 
       <TranslateTransform /> 
      </TransformGroup> 
     </Path.RenderTransform> 
    </Path>         
    </Grid> 
    </Setter.Value> 
</Setter> 

Problema:.? Non capisco sovrapponga seconda icona (in pratica tutto è trasparente Ciò significa che ho probsably bisogno di eliminare alcuni punti sulla prima icona, ma non ho potuto ottenere che in Blend

Qualcuno può condividere un po 'di luce su come ottenere ciò che mi serve?

risposta

5

Non so come dovrebbero essere le tue icone, ma il seguente XAML mostrerà due segni di sovrapposizione più usando gli stessi dati Path per entrambi, ma con un semplice TranslateTransform da sfalsare il secondo:

<Grid> 
     <Path Fill="#FF008000" > 
      <Path.Data> 
       <PathGeometry Figures="m 30 25.362188 0 30.000001 -30 0 0 20 30 0 0 29.999991 20 0 0 -29.999991 30 0 0 -20 -30 0 0 -30.000001 -20 0 z" FillRule="nonzero"/> 
      </Path.Data> 
     </Path> 
     <Path Fill="#FF92D050" > 
      <Path.Data> 
       <PathGeometry Figures="m 30 25.362188 0 30.000001 -30 0 0 20 30 0 0 29.999991 20 0 0 -29.999991 30 0 0 -20 -30 0 0 -30.000001 -20 0 z" FillRule="nonzero"/> 
      </Path.Data> 
      <Path.RenderTransform> 
       <TranslateTransform X="25" Y="-25"/> 
      </Path.RenderTransform> 
     </Path> 
    </Grid> 

Si consiglia di non inserire margini o proprietà 'Stira' negli oggetti del percorso corrente. Prenditi cura di ciò nel contenitore Grid in cui si trovano, o in una Viewbox che contiene se hai bisogno di ridimensionarli in alto o in basso.

EDIT

Se in realtà si sta utilizzando la proprietà Fill dell'oggetto Path per disegnare la geometria icona, come con un oggetto VisualBrush, al posto del Path.Data, allora non si desidera utilizzare un Path innanzitutto. Basta usare due oggetti Rectangle, con il tuo 'IconBrush' Compila la griglia e fai il TranslateTransform su uno di essi in modo che si sovrappongano alla quantità desiderata. Ricorda che con XAML, l'oggetto che appare per ultimo nella lista viene visualizzato sopra.

EDIT 2

<Grid> 
     <Path Fill="#FFFFFFFF"> 
      <Path.Data> 
       <PathGeometry Figures="m 13.123027 65.796864 0 81.448876 133.750213 0 0 -133.778725 -67.192062 0 z" FillRule="NonZero"/> 
      </Path.Data> 
     </Path> 
     <Path Fill="#FFB3B3B3"> 
      <Path.Data> 
       <PathGeometry Figures="M 79.624708 0.36218262 0 62.950511 l 0 97.411669 160 0 0 -159.99999738 -80.375292 0 z m 2.28303 16.89635038 61.172792 0 0 126.207297 -126.161061 0 0 -76.829978 0.187646 -0.156158 64.800623 0 0 -49.221161 z" FillRule="NonZero"/> 
      </Path.Data> 
     </Path> 
     <Path Fill="#FFFFFFFF"> 
      <Path.Data> 
       <PathGeometry Figures="m 13.123027 65.796864 0 81.448876 133.750213 0 0 -133.778725 -67.192062 0 z" FillRule="NonZero"/> 
      </Path.Data> 
      <Path.RenderTransform> 
       <TranslateTransform X="30" Y="30"/> 
      </Path.RenderTransform> 
     </Path> 
     <Path Fill="#FFB3B3B3"> 
      <Path.Data> 
       <PathGeometry Figures="M 79.624708 0.36218262 0 62.950511 l 0 97.411669 160 0 0 -159.99999738 -80.375292 0 z m 2.28303 16.89635038 61.172792 0 0 126.207297 -126.161061 0 0 -76.829978 0.187646 -0.156158 64.800623 0 0 -49.221161 z" FillRule="NonZero"/> 
      </Path.Data> 
      <Path.RenderTransform> 
       <TranslateTransform X="30" Y="30"/> 
      </Path.RenderTransform> 
     </Path> 
    </Grid> 

È possibile che questo XAML è probabilmente troppo grande per le vostre esigenze. È sufficiente inserire l'intera griglia in un Viewbox e quindi impostare le proprietà Height e Width dello Viewbox per ottenere la dimensione necessaria.



EDIT pulsante 3

personalizzato stile:

<Style x:Key="btnCustom" TargetType="{x:Type Button}"> 
    <Setter Property="Content"> 
     <Setter.Value> 
      <Viewbox> 
       <Grid Margin="0,0,30,30"> 
        <Path Fill="#FFFFFFFF"> 
         <Path.Data> 
          <PathGeometry Figures="m 13.123027 65.796864 0 81.448876 133.750213 0 0 -133.778725 -67.192062 0 z" FillRule="NonZero"/> 
         </Path.Data> 
        </Path> 
        <Path Fill="#FFB3B3B3"> 
         <Path.Data> 
          <PathGeometry Figures="M 79.624708 0.36218262 0 62.950511 l 0 97.411669 160 0 0 -159.99999738 -80.375292 0 z m 2.28303 16.89635038 61.172792 0 0 126.207297 -126.161061 0 0 -76.829978 0.187646 -0.156158 64.800623 0 0 -49.221161 z" FillRule="NonZero"/> 
         </Path.Data> 
        </Path> 
        <Path Fill="#FFFFFFFF"> 
         <Path.Data> 
          <PathGeometry Figures="m 13.123027 65.796864 0 81.448876 133.750213 0 0 -133.778725 -67.192062 0 z" FillRule="NonZero"/> 
         </Path.Data> 
         <Path.RenderTransform> 
          <TranslateTransform X="30" Y="30"/> 
         </Path.RenderTransform> 
        </Path> 
        <Path Fill="#FFB3B3B3"> 
         <Path.Data> 
          <PathGeometry Figures="M 79.624708 0.36218262 0 62.950511 l 0 97.411669 160 0 0 -159.99999738 -80.375292 0 z m 2.28303 16.89635038 61.172792 0 0 126.207297 -126.161061 0 0 -76.829978 0.187646 -0.156158 64.800623 0 0 -49.221161 z" FillRule="NonZero"/> 
         </Path.Data> 
         <Path.RenderTransform> 
          <TranslateTransform X="30" Y="30"/> 
         </Path.RenderTransform> 
        </Path> 
       </Grid> 
      </Viewbox> 
     </Setter.Value> 
    </Setter> 
</Style> 

implementazione Button:

<Button HorizontalAlignment="Right" Style="{StaticResource btnCustom}" 
      Height="30" Width="100"/> 

Come appare nel WPF vento ow:

enter image description here

+0

Ciao Stewbob. Il tuo codice ora sta affrontando lo stesso problema del mio. Le parti dell'icona superiore che si trovano sotto la seconda icona non dovrebbero essere visibili (in realtà, non è possibile vedere qualcosa che si trova al di sotto di un'altra cosa). L'icona della mia copia è simile a un'icona di copia in Visual Studio. Non ho inserito i punti dati, dal momento che la prima icona (nuova icona), che provo a duplicare e creare un'icona di copia, è la proprietà dell'azienda da cui usiamo i controlli, e non voglio entrare in nessuna problemi. – Goran

+0

@Goran, non capisco il tuo commento. Lo XAML nel mio post posiziona un segno più verde chiaro più "sopra" un segno più verde scuro. Questo è l'intento di XAML, ed è così che appare sullo schermo. Se si desidera cambiare quale oggetto Path è "in primo piano" è necessario modificare l'ordine in cui sono elencati in XAML. – Stewbob

+0

Sì, nel tuo esempio lo posiziona sopra, dal momento che stai usando forme geometriche. Il Sentiero originale che uso utilizza ciò che credo è una serie di punti, quindi non esiste una "forma". Quando cambio l'ordine dei percorsi, non fa differenza. Ecco un link per mostrarti visivamente come appare. https://skydrive.live.com/redir?resid=F80033B5ECD8347C!140&authkey=!APGPszc9i3_m_Go – Goran

Problemi correlati