50 messaggi dal 16 novembre 2009
Salve a tutti,
vorrei impostare l'immagine in background di un bottone, diverso a seconda che il mouse sia lontano (a colori) o sul bottone (in b/n). Ho provato a inserire la proprietà di background, ma l'immagine viene visualizzata con un offuscamento crescente dal basso in alto. Inoltre non so come impostare l'immagine in modo che sia cambiata sull'evento MouseEnter (in b/n) e ripristinata sull'evento Mouseleave (di nuovo a colori). I bottoni sono 5, e ciascuno ha due diverse bitmap da usare, quindi usare gli stili non credo sia conveniente. Dovrei usare i template? Come? Potete fornirmi degli esempi? O guidarmi a dove trovarne?

Grazie a chi mi fornirà aiuti e soprattutto esempi.
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
tesis52 ha scritto:
Salve a tutti,
vorrei impostare l'immagine in background di un bottone, diverso a seconda che il mouse sia lontano (a colori) o sul bottone (in b/n). Ho provato a inserire la proprietà di background, ma l'immagine viene visualizzata con un offuscamento crescente dal basso in alto. Inoltre non so come impostare l'immagine in modo che sia cambiata sull'evento MouseEnter (in b/n) e ripristinata sull'evento Mouseleave (di nuovo a colori). I bottoni sono 5, e ciascuno ha due diverse bitmap da usare, quindi usare gli stili non credo sia conveniente. Dovrei usare i template? Come? Potete fornirmi degli esempi? O guidarmi a dove trovarne?

Grazie a chi mi fornirà aiuti e soprattutto esempi.

Ciao,
se guardi la Template di base di Button, vedi che il Background che si può impostare dal controllo viene applicato al Grid, che contiene BackgroundGradient il cui gradiente lineare crea l'effetto di opacità che descrivi, e che non è adatto al tuo scopo.

Quindi dovresti lavorare con la Template per avere due immagini in primo piano (colore e b/n) ed usare il Visual State Manager (pannello States, non so se lo conosci già) per legare la sua visualizzazione delle due immagini in funzione del mouse.

In questo modo dovresti creare tante Template per ogni coppia di immagini il cui url sono cablati all'interno; se hai molti pulsanti potresti estendere Button con un tuo controllo, usare delle DependencyProperties per impostare "dall'esterno" gli url delle immagini.
Qui si complica un po', ma solo quando lo fai per la prima volta.
Se hai bisogno, scrivi.

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
50 messaggi dal 16 novembre 2009
Grazie Alessio,
sapevo di trovare una guida. Purtroppo confermi i miei sospetti che dovrei utilizzare un template per ogni bottone con due immagini differenti.
Cambiando idea, lasciando una sola immagine per bottone e un comportamento comune (bordo Aquamarina, sfondo Trasparente in Normal/Rosso in MouseHover/Blu in Press), potrei usare un solo template? Io non ci son riuscito. Allego un pezzetto di codice con quel che son riuscito a fare, pensi sia modificabile? Come legare una proprietà bindabile dell'immagine nel template (x:Name="ButtonImage"), sempre che sia possibile? Grazie, buona serata (o giornata). Saverio Tedeschi


<Style TargetType="Button" x:Key="butTemplate">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="RootElement">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="BordBrush"
Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard >
<ColorAnimation Storyboard.TargetName="BordBrush"
Storyboard.TargetProperty="Color" To="Blue"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>

<Border.Background>
<SolidColorBrush x:Name="BordBrush" Color="Transparent"/>
</Border.Background>

<Grid Margin="0" Background="Transparent">
<Rectangle x:Name="ButtonBorder" Height="80" Width="80" StrokeThickness="4" RadiusX="13" RadiusY="13" Stroke="Aquamarine" />
<Image x:Name="ButtonImage" Source="/SampleApplication1;component/User%20Group-01.png" Stretch="None" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>

<Button Height="80" HorizontalAlignment="Left" Margin="21,28,0,0" Name="Button1" VerticalAlignment="Top" Width="80" Style="{StaticResource butTemplate}" />
Modificato da tesis52 il 25 marzo 2012 21.09 -

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.