la grafica per voi è un incubo? l'animazione è solo una cosa che sentite dire in medici in prima linea? credete che Silverlight sia il nome di una lampada dell'Ikea?

BENVENUTI!!!

questo è il posto che fa per voi, qua cercheremo di rispondere a ogni vostro quesito su Silvelight, XAML, Blend e Design.

sotto con le domande!

saluti Marco (nostromo) e Alessio (novecento)

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
124 messaggi dal 21 luglio 2001
Forse la domanda è troppo stupida però la faccio lo stesso,
ho creato in silverlight un'animazione devo dire abbastanza articolata e utilizzando expression blend non c'ho messo poi tanto...

ma se ora nello xaml volessi inserire un pulsante come devo fare????

in flash inserisci un nuovo simbolo (pulsante), intervieni sui vari stati, e con geturl vai in un'altra pagina???

con xaml come si fa??? oppure da expression blend come faccio???

grazie a tutti
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
Ciao,
in Silverlight ogni elemento grafico può essere trasformato in un bottone gestendo gli eventi MouseEnter, MouseLeave e MouseLeftButtonDown.
Puoi preparare il tutto realizzando in Blend le animazioni che dovranno essere eseguite nei vari eventi e farne gestione attraverso javascript.
Ad esempio potresti iniziare creando la grafica del tuo bottone, per comodità io lo metterei dentro un Canvas e lo chiamo Button1:
<Canvas RenderTransformOrigin="0.5,0.5" x:Name="Button1" MouseEnter="Button1_onMouseEnter" MouseLeave="Button1_onMouseLeave" MouseLeftButtonDown="Button1_onMouseLeftButtonDown" 

Width="115.38" Height="44.935" Canvas.Left="20" Canvas.Top="20">
  <Canvas.RenderTransform>
    <TransformGroup>
      <ScaleTransform ScaleX="1" ScaleY="1"/>
      <SkewTransform AngleX="0" AngleY="0"/>
      <RotateTransform Angle="0"/>
      <TranslateTransform X="0" Y="0"/>
    </TransformGroup>
  </Canvas.RenderTransform>
  <Rectangle Width="114" Height="45.429" Stroke="#FF000000" StrokeLineJoin="Round" RadiusX="11" RadiusY="11" Canvas.Left="0" Canvas.Top="0" x:Name="rectangle">
    <Rectangle.Fill>
      <RadialGradientBrush RadiusX="0.490286" RadiusY="0.512683" Center="0.448772,0.548938" GradientOrigin="0.448772,0.548938">
        <RadialGradientBrush.RelativeTransform>
          <TransformGroup/>
        </RadialGradientBrush.RelativeTransform>
        <GradientStop Color="#FFFF0000" Offset="0"/>
        <GradientStop Color="#FFFFC800" Offset="0.986425"/>
      </RadialGradientBrush>
    </Rectangle.Fill>
  </Rectangle>
  <TextBlock Width="60" Height="22.286" Canvas.Left="26" Canvas.Top="11" TextWrapping="Wrap"><Run Text="Button1"/></TextBlock>
</Canvas>


Come vedi ho già inserito le dichiarazioni degli eventi direttamente nello XAML :
MouseEnter="Button1_onMouseEnter" MouseLeave="Button1_onMouseLeave" MouseLeftButtonDown="Button1_onMouseLeftButtonDown"


Poi preparare le animazioni per i tre eventi, per semplificare faccio che all'entrata del mouse (MouseEnter) il pulsante si ingrandisce un po' e cambia di colore, al click invece lo faccio

diventare leggermente più piccolo:
<Canvas.Resources>
  <Storyboard x:Name="Button1OnMouseEnter">
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Button1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].

(ScaleTransform.ScaleX)">
      <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1.05" KeySpline="1,0,1,1"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Button1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].

(ScaleTransform.ScaleY)">
      <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1.05" KeySpline="1,0,1,1"/>
    </DoubleAnimationUsingKeyFrames>
    <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].

(GradientStop.Color)">
      <SplineColorKeyFrame KeyTime="00:00:00.3000000" Value="#FF5FC84E" KeySpline="1,0,1,1"/>
    </ColorAnimationUsingKeyFrames>
  </Storyboard>
  <Storyboard x:Name="Button1OnMouseLeave">
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Button1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].

(ScaleTransform.ScaleX)">
            <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1.0" KeySpline="0,0,1,1"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Button1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].

(ScaleTransform.ScaleY)">
            <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1.0" KeySpline="0,0,1,1"/>
        </DoubleAnimationUsingKeyFrames>
        <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)">
            <SplineColorKeyFrame KeyTime="00:00:00.3000000" Value="#FFFF0000" KeySpline="0,0,1,1"/>
        </ColorAnimationUsingKeyFrames>
  </Storyboard>
  <Storyboard x:Name="Button1OnMouseLeftButtonDown">
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Button1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].

(ScaleTransform.ScaleX)">
      <DiscreteDoubleKeyFrame KeyTime="00:00:00.1000000" Value="0.95"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Button1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].

(ScaleTransform.ScaleY)">
      <DiscreteDoubleKeyFrame KeyTime="00:00:00.1000000" Value="0.95"/>
    </DoubleAnimationUsingKeyFrames>
  </Storyboard>
</Canvas.Resources>


Ho preparato gli storyboard delle animazioni come risorse, in questo modo posso gestirne la riproduzione in seguito agli eventi del mouse, così:
function Button1_onMouseEnter(sender, mouseEventArgs)
{     
    var _Button1OnMouseEnter = sender.findName("Button1OnMouseEnter");
    _Button1OnMouseEnter.begin();
    sender.Cursor = "Hand";
}
function Button1_onMouseLeave(sender, mouseEventArgs)
{     
    var _Button1OnMouseLeave = sender.findName("Button1OnMouseLeave");
    _Button1OnMouseLeave.begin();
}
function Button1_onMouseLeftButtonDown(sender, mouseEventArgs)
{
    var _Button1OnMouseLeftButtonDown = sender.findName("Button1OnMouseLeftButtonDown");
    _Button1OnMouseLeftButtonDown.begin();
    alert(sender.Name);
} 


Nell'evento mouseEnter puoi cambiare l'icona del mouse con la proprietà Cursor, questo aiuta l'utente a capire che può fare click; nell'evento del click del mouse puoi usare le classiche funzioni Javascript per far aprire una nuova finestra:
window.open("http://www.silverlightitalia.com",'_blank');

oppure spostando l'utente ad un nuovo indirizzo:
location.href = "http://www.silverlightitalia.com";

E se necessario aggiungendo i dovuti controlli per scrivere del Javascript compatibile con tutti i browser.

Il concetto è che in seguito all'evento del mouse dai inizio alla specifica animazione che hai preparato, all'inizio può sembrare macchinoso in quanto non c'è un controllo specifico Button che ha già tutta la logica pronta, ma ti da grande flessibilità di buttonizzare ogni cosa.
Ti voglio far notare una particolarità, se ci fai caso ho preparato tutte animazioni con un solo "keyFrame", diciamo quello finale in cui voglio che la forma assuma una certa grandezza o colore, non specificando il keyFrame "iniziale" consente all'animazione di mouseLeave di iniziare da qualunque stato si trovi l'oggetto, creando una animazione fluida e naturale.
In Flash dovevamo scrivere un codice particolare per scorrere all'indietro i fotogrammi di una animazione.

Spero ti sia utile.

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
124 messaggi dal 21 luglio 2001
mooooooooooooooooooooooooooooooooooooooooooolto utile ti ringrazio davvero tanto!!
124 messaggi dal 21 luglio 2001
Forse sbaglio a paragonarlo sempre a Flash, ma se a un pulsante devo collegare l'ingresso di un'altra animazione come faccio??
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
Cosa intendi per "ingresso di un'altra animazione" ?

Nell'evento gestore del click con il tasto sinistro del mouse su un oggetto (MouseLeftButtonDown) puoi iniziare la riproduzione anche di altre animazioni non legate al "bottone" stesso, devi recuperare l'animazione con findName e fare begin().

Puoi spiegare di più il tuo scenario?

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
belf wrote:
Forse sbaglio a paragonarlo sempre a Flash, ma se a un pulsante devo collegare l'ingresso di un'altra animazione come faccio??

sì, sono diversi. perchè Flash è basato sul concetto di storyboard, con oggetti che cambiano nell'arco di un certo intervallo di tempo, Silverlight è invece come un'applicazione per Windows, con un'area dove posizionare gli oggetti, e la stessa cosa la gestisce attraverso lo storyboard, oppure, come nel tuo caso, attraverso gli eventi. per il resto novecento ti ha abbondantemente risposto

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
124 messaggi dal 21 luglio 2001
Si novecento ha risposto perfettamente alla mia domanda, con il "begin()" associato all'evento: click con il tasto sinistro del mouse, per esempio, faccio "entrare" un'altra animazione.

Chiedevo, perchè in Silverlight (da quello che ho capito) gestisci il tempo in termini di secondi, in Flash puoi saltare da un frame a un'altro con molta facilità..

Grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.