Ingrandisci una miniatura dell'immagine al passaggio del mouse
-
05-07-2019 - |
Domanda
Qualcuno potrebbe offrirmi qualche consiglio su come potrei fare per implementare un controllo in Silverlight che mostri le miniature delle immagini che una volta passate il mouse sopra lo ingrandiscono?
Soluzione
Ho fatto qualcosa di simile per un pulsante. Ecco il codice per questo: sono sicuro che puoi adattarlo facilmente per lavorare con un'immagine. Si noti che non ho mai rilasciato questo codice; era solo un esperimento quando stavo imparando Silverlight. Non prenderlo come esempio di buone pratiche.
XAML:
<UserControl x:Class="GrowingButton.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<Storyboard x:Name="growStoryboard">
<DoubleAnimation
Storyboard.TargetProperty="Width"
Storyboard.TargetName="testButton"
Duration="0:0:0.1"
By="20">
</DoubleAnimation>
<DoubleAnimation
Storyboard.TargetProperty="Height"
Storyboard.TargetName="testButton"
Duration="0:0:1"
By="-20">
</DoubleAnimation>
</Storyboard>
<Storyboard x:Name="shrinkStoryboard">
<DoubleAnimation
Storyboard.TargetProperty="Width"
Storyboard.TargetName="testButton"
Duration="0:0:1"
By="-20">
</DoubleAnimation>
<DoubleAnimation
Storyboard.TargetProperty="Height"
Storyboard.TargetName="testButton"
Duration="0:0:0.1"
By="20">
</DoubleAnimation>
</Storyboard>
</Grid.Resources>
<Button x:Name="testButton" Content="Test" Grid.Column="1" MouseEnter="Button_MouseEnter" MouseLeave="Button_MouseLeave" VerticalAlignment="Center" HorizontalAlignment="Center" Width="50" Height="50">
</Button>
</Grid>
</UserControl>
Codice:
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
}
private void Button_MouseEnter(object sender, MouseEventArgs e)
{
this.shrinkStoryboard.SkipToFill();
this.growStoryboard.Begin();
}
private void Button_MouseLeave(object sender, MouseEventArgs e)
{
this.growStoryboard.SkipToFill();
this.shrinkStoryboard.Begin();
}
}
Altri suggerimenti
Finché il tuo controllo ha un VisualState per lo stato MouseOver, puoi usare un DoubleAnimation
(o DoubleAnimationUsingKeyframes
) per fare un ScaleTransform sul controllo.
La creazione dei diversi VisualState (all'interno di un VisualStateGroup) per il controllo di miniature / immagini ti farà risparmiare il problema di dover collegare i tuoi eventi nel codice sottostante. Sarai anche in grado di definire visivamente il diverso ridimensionamento in Blend che è una bella caratteristica da avere.
Questa pagina - Fish Eye Menu ha un esempio che fa qualcosa di simile a quello che vuoi. Per qualche motivo non visualizza la versione di Silverlight nonostante io abbia installato Silverlight. Potrebbe essere qualcosa a che fare con l'essere in Silverlight 2.