2016-04-23 9 views
1

Ich versuche, eine Login-Schaltfläche zu erreichen, die sich in einen Please wait-Modus ändert, sobald sie gedrückt wird. Ich habe über StoryBoard-Animationen innerhalb von Schaltflächen oder GIF-Bildanimationen nachgedacht. Scheint, ich bin ziemlich neu in WPF und nach mehreren Suchversuchen kann ich keine voll funktionsfähige Idee finden.WPF-Taste GIF-Animation

Login-Button Idee
enter image description here

Was wäre der beste Weg sein, die oben etwas zu tun? Gibt es eine Möglichkeit, das GIF-Bild zu eliminieren und dasselbe mit einem Pfad oder etwas Ähnlichem zu erstellen? Beachten Sie auch, dass dieses Verhalten der Schaltfläche beim Button.Click-Ereignis ausgelöst werden soll.

+0

Sie können es ohne Bibliotheken von Drittanbietern mit einem statischen Bild und 'RotateTransform' Storyboard leicht tun. Aktiviere auf Klick, aber für wie lange? – dkozl

+0

Endlich habe ich es mit dem GIF-Plugin von Drittanbietern gemacht. – Anup

Antwort

1

Fügen Sie einfach WpfAnimatedGif von Ihrem Visual Studio Tools -> NuGet Package Manager->Package Manager Console. Dort finden Sie das Paket Addierfenster und geben Sie pm > Install-Package WpfAnimatedGif. Nach ein paar Sekunden sollte das Paket hinzugefügt werden. Nun erstens haben Sie namespace hinzufügen xmlns:gif="http://wpfanimatedgif.codeplex.com" dann gestalten Sie Ihre Button.

<Window x:Class="WpfApplication1.MainWindow" Name="root" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:gif="http://wpfanimatedgif.codeplex.com" 
      Width="500" Height="500" DataContext="{Binding ElementName=root}"> 

     <StackPanel> 
      <Button Name="BtnLogin" Width="100" Height="30" Content="Login" Background="Red" Margin="0,0,0,5" Click="Button_Click"/> 
      <Button Width="100" Height="30" Background="Red"> 
      <Grid> 
        <Image gif:ImageBehavior.AnimatedSource="{Binding DataContext.LoadingImage}" HorizontalAlignment="Left" VerticalAlignment="Center"/> 
       <TextBlock Text="Please Wait" Padding="30,0,0,0" HorizontalAlignment="Right" VerticalAlignment="Center"/> 
      </Grid> 
     </Button> 
     </StackPanel> 
     </Window> 

Die folgende CS-Datei unten ist, und wenn Sie Laden Bild anhalten müssen, nur zuweisen LoadingImage = null;

public partial class MainWindow : Window,INotifyPropertyChanged 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
     private ImageSource _LoadingImage; 
     public ImageSource LoadingImage 
     { 
      get { return _LoadingImage; } 
      set 
      { 
       _LoadingImage = value; 
       OnPropertyChanged("LoadingImage"); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
     private void OnPropertyChanged(String info) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(info)); 
      } 
     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      LoadingImage = GetBitmapImage("/aaaa.gif"); 
     } 
     public static BitmapImage GetBitmapImage(String location) 
     { 
      BitmapImage image = null; 
      try 
      { 
       Uri iconUri = new Uri("pack://application:,,,/" + ";component" + location, UriKind.RelativeOrAbsolute); 

       image = new BitmapImage(iconUri); 
      } 
      catch (Exception ex) 
      { 
      } 
      return image; 
     } 
    } 
+0

Der obige Code zeigt immer das gif an. Ich möchte es nur beim Click-Event. – Anup

+0

@Anup Können Sie angeben, wie Sie es gelöst haben? Ich bin daran interessiert. Bitte teilen Sie Ihre Lösung. Danke. – user1624552

+0

@ user1624552 Wie in der Antwort erwähnt, folgte ich demselben Schritt, d. H. WpfAnimateGif nuget package. Bitte beachten Sie, dass ich den Text der Änderungsschaltfläche nicht gewählt habe. Stattdessen zeigte ich das animierte Gif zusammen mit einem Text in einem separaten Steuerelement. – Anup