【问题标题】:MediaElement animation activation loop doesn't trigger last 3 animationsMediaElement 动画激活循环不会触发最后 3 个动画
【发布时间】:2015-12-23 03:43:04
【问题描述】:

在我的循环中,我的屏幕没有填充最后 3 个MediaElements。如果我扩大或缩小MediaElement 数组....

MediaElement[] mygif = new MediaElement[30];

从 30 个元素到 40 个元素,它将显示 37 个元素。

这是此方法的完整源代码,如果您发现第一个媒体元素被隐藏,这是故意的。

private void LoadGifScreen()
{
    Window GifBrowserCmd = new Window();
    GifBrowserCmd.ShowInTaskbar = false;
    GifBrowserCmd.Width = 200;
    GifBrowserCmd.Height = screenHeight * .8;
    GifBrowserCmd.Left = screenWidth - GifBrowserCmd.Width;
    GifBrowserCmd.Top = screenHeight*.1;
    GifBrowserCmd.WindowStyle = System.Windows.WindowStyle.None;
    GifBrowserCmd.ResizeMode = System.Windows.ResizeMode.NoResize;
    GifBrowserCmd.Background = BaseColor;
    GifBrowserCmd.AllowsTransparency = true;
    GifBrowserCmd.Opacity = toolOpacity;

    MediaElement[] mygif = new MediaElement[30];
    gborder = new Border[30];
    GifCanvas = new Canvas();
    int brdr_height = 150;
    GifCanvas.Height = brdr_height * mygif.Count();
    GifList = new Dictionary<int, string>();
    DoubleAnimation[] anim2 = new DoubleAnimation[30];
    bool[] animsact = new bool[30];
    for (int i = 0; i < mygif.Count(); i++)
    {
        mygif[i] = new MediaElement();
        gborder[i] = new Border();
        mygif[i].UnloadedBehavior = MediaState.Play;
        mygif[i].LoadedBehavior = MediaState.Manual;
        mygif[i].Source = new Uri(@filesArray[i]);
        GifList.Add(i, filesArray[i]);
        mygif[i].Stretch = Stretch.Uniform;
        mygif[i].Position = TimeSpan.FromMilliseconds(1);
        mygif[i].Play();

        mygif[i].MediaEnded += (o, r) =>
        {
            MediaElement tmp = (MediaElement)o;
            int tmpkey = 0;
            string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
            if (GifList.ContainsValue(searchstring))
            {
                tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
            }
            mygif[tmpkey].Position = new TimeSpan(0, 0, 1);
            mygif[tmpkey].Play();
        };
        mygif[i].PreviewMouseLeftButtonDown += (o, m) =>
        {
            MediaElement tmp = (MediaElement)o;
            int tmpkey = 0;
            string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
            if (GifList.ContainsValue(searchstring))
            {
                tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
                LoadGifDetailScreen(tmpkey);
            }
            else
            {
                MessageBox.Show("Couldn't find gif in Dictionary!");
            }
        };

        gborder[i].BorderBrush = Brushes.White;
        gborder[i].BorderThickness = new Thickness(3, 3, 3, 3);
        gborder[i].CornerRadius = new CornerRadius(8, 8, 8, 8);
        gborder[i].Child = mygif[i];
        gborder[i].Width = 200;
        gborder[i].Height = brdr_height;
        GifCanvas.Children.Add(gborder[i]);
        Canvas.SetTop(gborder[i], (i * gborder[i].Height) + (bigspacer * i) - gborder[i].Height);
        Canvas.SetLeft(gborder[i], gborder[i].Width);
        gborder[i].Visibility = System.Windows.Visibility.Hidden;

        mygif[i].MediaOpened += (l,p) => {
            MediaElement tmp = (MediaElement)l;
            int tmpkey = 0;
            string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
            if (GifList.ContainsValue(searchstring))
            {
                tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
                tmpkey--;
            }
            TranslateTransform trans = new TranslateTransform();
            gborder[tmpkey].RenderTransform = trans;
            anim2[tmpkey] = new DoubleAnimation(gborder[tmpkey].Width, 0 - gborder[tmpkey].Width, TimeSpan.FromSeconds(.25));
            anim2[tmpkey].Completed += (s, e) =>
            {
                if (position <= mygif.Count()) {
                    gborder[position].Visibility = System.Windows.Visibility.Visible;
                    trans.BeginAnimation(TranslateTransform.XProperty, anim2[position]);
                    position++;
                }
            };
            if (tmpkey == 0)
            {
                gborder[(tmpkey)].Visibility = System.Windows.Visibility.Visible;
                trans.BeginAnimation(TranslateTransform.XProperty, anim2[(tmpkey)]);
                position++;
            }
        };
    }
    ScrollViewer sv1 = new ScrollViewer();
    sv1.CanContentScroll = true;
    sv1.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
    sv1.Height = GifBrowserCmd.Height;
    sv1.Content = GifCanvas;
    GifBrowserGrid.Children.Add(sv1);
    GifBrowserCmd.Content = GifBrowserGrid;
    GifBrowserCmd.Show();
    GifBrowserCmd.Deactivated += GifListCmd_Deactivated;
}

如何激活整个MediaElement 数组的动画?

更新

从 Netscapes 答案中添加代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Runtime.InteropServices;
using System.IO;

namespace WpfApplication4
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        int spacer = 2;
        int bigspacer;
        double toolOpacity = 1;
        double windowWidth = 50;
        double windowHeight = 50;
        double totalwidth;
        double centerApp;
        double screenWidth = System.Windows.SystemParameters.PrimaryScreenWidth;
        double screenHeight = System.Windows.SystemParameters.PrimaryScreenHeight;

        List<MediaElement> mygif;
        List<Border> gborder;
        List<DoubleAnimation> anim2;
        List<bool> animsact;
        Dictionary<int, string> GifList = new Dictionary<int, string>();
        int _pos = 0;
        Canvas GifCanvas;
        Grid GifBrowserGrid = new Grid();
        private int position
        {
            get
            {
                return _pos;
            }
            set
            {
                _pos = value;
                //Console.WriteLine(_pos);
            }
        }
        public MainWindow()
        {
            InitializeComponent();

            Window GifBrowserCmd = new Window();
            GifBrowserCmd.ShowInTaskbar = false;
            GifBrowserCmd.Width = 200;
            GifBrowserCmd.Height = screenHeight * .8;
            GifBrowserCmd.Left = screenWidth - GifBrowserCmd.Width;
            GifBrowserCmd.Top = screenHeight * .1;
            GifBrowserCmd.WindowStyle = System.Windows.WindowStyle.None;
            GifBrowserCmd.ResizeMode = System.Windows.ResizeMode.NoResize;
            GifBrowserCmd.Background = Brushes.Black;
            GifBrowserCmd.AllowsTransparency = true;
            GifBrowserCmd.Opacity = toolOpacity;
            GifCanvas = new Canvas();
            GifList = new Dictionary<int, string>();
            string[] filesArray = Directory.GetFiles("D:\\Images\\Animated Images\\");

            mygif = Enumerable.Range(0, 20).Select(d => new MediaElement()).ToList();
            gborder = Enumerable.Range(0, 30).Select(d => new Border()).ToList();
            anim2 = Enumerable.Range(0, 30).Select(d => new DoubleAnimation()).ToList();
            animsact = Enumerable.Range(0, 30).Select(d => false).ToList();
            GifCanvas = new Canvas();
            int brdr_height = 150;
            GifCanvas.Height = brdr_height * mygif.Count();

            for (int i = 0; i < mygif.Count(); i++)
            {
                GifList.Add(i, filesArray[i]);
                mygif[i] = new MediaElement();
                mygif[i].Source = new Uri(@filesArray[i]);
                gborder[i] = new Border();

                //Setup MediaElement
                mygif[i].UnloadedBehavior = MediaState.Play;
                mygif[i].LoadedBehavior = MediaState.Manual;
                mygif[i].MediaEnded += MediaEndedHandler;
                mygif[i].PreviewMouseLeftButtonDown += PreviewMouseLeftButtonDownHandler;
                mygif[i].MediaOpened += MediaOpened;

                mygif[i].Stretch = Stretch.Uniform;
                mygif[i].Position = TimeSpan.FromMilliseconds(1);
                mygif[i].Play();

                //Setup Border
                gborder[i].BorderBrush = Brushes.White;
                gborder[i].BorderThickness = new Thickness(3, 3, 3, 3);
                gborder[i].CornerRadius = new CornerRadius(8, 8, 8, 8);
                gborder[i].Child = mygif[i];
                gborder[i].Width = 200;
                gborder[i].Height = brdr_height;

                GifCanvas.Children.Add(gborder[i]);
                Canvas.SetTop(gborder[i], (i * gborder[i].Height) + (bigspacer * i));// - gborder[i].Height);
                Canvas.SetLeft(gborder[i], gborder[i].Width);
                //Comment the below line out to see if shows them all has an effect
                //gborder[i].Visibility = System.Windows.Visibility.Hidden;
            }

            ScrollViewer sv1 = new ScrollViewer();
            sv1.CanContentScroll = true;
            sv1.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
            sv1.Height = GifBrowserCmd.Height;
            sv1.Content = GifCanvas;
            GifBrowserGrid.Children.Add(sv1);
            GifBrowserCmd.Content = GifBrowserGrid;
            GifBrowserCmd.Show();
            //GifBrowserCmd.Deactivated += GifListCmd_Deactivated;
        }

        private void MediaOpened(object sender, RoutedEventArgs e)
        {
            MediaElement tmp = (MediaElement)sender;
            int tmpkey = 0;
            string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
            if (GifList.ContainsValue(searchstring))
            {
                tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
                tmpkey--;
            }
            TranslateTransform trans = new TranslateTransform();
            gborder[tmpkey].RenderTransform = trans;
            anim2[tmpkey] = new DoubleAnimation(gborder[tmpkey].Width, 0 - gborder[tmpkey].Width, TimeSpan.FromSeconds(.25));
            anim2[tmpkey].Completed += AnimationCompleted;
            if (tmpkey == 0)
            {
                gborder[(tmpkey)].Visibility = System.Windows.Visibility.Visible;
                trans.BeginAnimation(TranslateTransform.XProperty, anim2[(tmpkey)]);
                position++;
            }
        }

        private void AnimationCompleted(object sender, EventArgs e)
        {
            if (position < mygif.Count())
            {
                try
                {
                bool changed = false;
                if (position == 19)
                {
                    changed = true;
                }
                    gborder[position].Visibility = System.Windows.Visibility.Visible;
                    gborder[position].RenderTransform = new TranslateTransform();
                    gborder[position].RenderTransform.BeginAnimation(TranslateTransform.XProperty, anim2[position++]);

                }
                catch (Exception f)
                {
                    MessageBox.Show(f.InnerException.Data.ToString());
                }
            }
        }

        private void PreviewMouseLeftButtonDownHandler(object sender, MouseButtonEventArgs e)
        {
            MediaElement tmp = (MediaElement)sender;
            int tmpkey = 0;
            string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
            if (GifList.ContainsValue(searchstring))
            {
                tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
                //LoadGifDetailScreen(tmpkey);
            }
            else
            {
                MessageBox.Show("Couldn't find gif in Dictionary!");
            }
        }

        private void MediaEndedHandler(object sender, RoutedEventArgs e)
        {
            MediaElement tmp = (MediaElement)sender;
            int tmpkey = 0;
            string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
            if (GifList.ContainsValue(searchstring))
            {
                tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
            }
            mygif[tmpkey].Position = new TimeSpan(0, 0, 1);
            mygif[tmpkey].Play();
        }

    }
}

【问题讨论】:

  • 听起来您的 3 个动画无法加载。我会确保他们在那里使用逐步调试。然后我会检查你的屏幕是否足够宽以适合所有人
  • 先试过了。我的动画数组是 20 个元素,只显示了 17 个。将其设置为 30 以查看 13 是否不会显示。不,只有最后 3 个。屏幕是滚动查看器中的垂直自动调整大小的画布,因此它具有媒体元素的空间,但最后三个不执行双重动画。不过,谢谢您的意见。
  • 我认为这与我在嵌套 MediaOpened 操作下的自动激活有关,该操作会增加位置变量。但是当我设置调试时,它会通过最后三个元素适当地递增。
  • GifBrowserCmd 是什么?
  • 另外,你应该使用mygif.Length而不是.Count()

标签: c# wpf


【解决方案1】:

我怀疑这可能与position 的递增以及您生成tmpkey 的方式有关。我还建议不要将 lambdas 用于您的事件处理程序,使用本地方法可能是更安全的途径。

显示控件后,使用 Snoop 检查控件并确定是否所有 30 个控件都实际添加到 UI。如果是这样,那么您的代码有问题,因为控件重叠,您只是没有正确设置可见性(这就是为什么我注释掉下面的一行以进行调试)。

这句话让我挑眉:

tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
tmpkey--;

如果这在您的第一个元素上运行,字典键 = 0,那么 tmpkey-- 将是 -1。如果它在您的最后一个元素上运行,tmpkey 将是28 并且永远不会等于29,因此使用tmpkey 作为索引访问您的数组不会获得分配的属性。相关——LoadGifDetailScreen 中发生了什么事情吗?

我创建了一个带有 setter 的属性,它设置 position 并在每次设置时打印出该值。观察你的输出窗口,看看你是否注意到任何有趣的增量。我还修改了代码,使其看起来更简洁(我将编辑问题以删除优化标签)。

代码:

List<MediaElement> mygif;
List<Border> gborder;
List<DoubleAnimation> anim2;
List<bool> animsact;
Dictionary<int, string> GifList = new Dictionary<int, string>();
int _pos = 0;
private int position
{
    get
    {
        return _pos;
    }
    set
    {
        _pos = value;
        Console.WriteLine(_pos);
    }
}
public MainWindow()
{
    InitializeComponent();
    mygif = Enumerable.Range(0, 30).Select(d => new MediaElement()).ToList();
    gborder = Enumerable.Range(0, 30).Select(d => new Border()).ToList();
    anim2 = Enumerable.Range(0, 30).Select(d => new DoubleAnimation()).ToList();
    animsact = Enumerable.Range(0, 30).Select(d => false).ToList();
    GifCanvas = new Canvas();
    int brdr_height = 150;
    GifCanvas.Height = brdr_height * mygif.Count;

    for(int i = 0; i < mygif.Count; i++)
    {
        //Setup MediaElement
        mygif[i].UnloadedBehavior = MediaState.Play;
        mygif[i].LoadedBehavior = MediaState.Manual;
        mygif[i].MediaEnded += MediaEndedHandler;
        mygif[i].PreviewMouseLeftButtonDown += PreviewMouseLeftButtonDownHandler;
        mygif[i].MediaOpened += MainWindow_MediaOpened;

        //Setup Border
        gborder[i].BorderBrush = Brushes.White;
        gborder[i].BorderThickness = new Thickness(3, 3, 3, 3);
        gborder[i].CornerRadius = new CornerRadius(8, 8, 8, 8);
        gborder[i].Child = mygif[i];
        gborder[i].Width = 200;
        gborder[i].Height = brdr_height;

        GifCanvas.Children.Add(gborder[i]);
        Canvas.SetTop(gborder[i], (i * gborder[i].Height) + (bigspacer * i) - gborder[i].Height);
        Canvas.SetLeft(gborder[i], gborder[i].Width);
        //Comment the below line out to see if shows them all has an effect
        //gborder[i].Visibility = System.Windows.Visibility.Hidden;
    }

    ScrollViewer sv1 = new ScrollViewer();
    sv1.CanContentScroll = true;
    sv1.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
    sv1.Height = GifBrowserCmd.Height;
    sv1.Content = GifCanvas;
    GifBrowserGrid.Children.Add(sv1);
    GifBrowserCmd.Content = GifBrowserGrid;
    GifBrowserCmd.Show();
    GifBrowserCmd.Deactivated += GifListCmd_Deactivated;
}

private void MediaOpened(object sender, RoutedEventArgs e)
{
    MediaElement tmp = (MediaElement)sender;
    int tmpkey = 0;
    string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
    if(GifList.ContainsValue(searchstring))
    {
        tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
        tmpkey--;
    }
    TranslateTransform trans = new TranslateTransform();
    gborder[tmpkey].RenderTransform = trans;
    anim2[tmpkey] = new DoubleAnimation(gborder[tmpkey].Width, 0 - gborder[tmpkey].Width, TimeSpan.FromSeconds(.25));
    anim2[tmpkey].Completed += AnimationCompleted;
    if(tmpkey == 0)
    {
        gborder[(tmpkey)].Visibility = System.Windows.Visibility.Visible;
        trans.BeginAnimation(TranslateTransform.XProperty, anim2[(tmpkey)]);
        position++;
    }
}

private void AnimationCompleted(object sender, EventArgs e)
{
    if(position < mygif.Count)
    {
        gborder[position].Visibility = System.Windows.Visibility.Visible;
        gborder[position].RenderTransform.BeginAnimation(TranslateTransform.XProperty, anim2[position++]);
    }
}

private void PreviewMouseLeftButtonDownHandler(object sender, MouseButtonEventArgs e)
{
    MediaElement tmp = (MediaElement)sender;
    int tmpkey = 0;
    string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
    if(GifList.ContainsValue(searchstring))
    {
        tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
        LoadGifDetailScreen(tmpkey);
    }
    else
    {
        MessageBox.Show("Couldn't find gif in Dictionary!");
    }
}

private void MediaEndedHandler(object sender, RoutedEventArgs e)
{
    MediaElement tmp = (MediaElement)sender;
    int tmpkey = 0;
    string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
    if(GifList.ContainsValue(searchstring))
    {
        tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
    }
    mygif[tmpkey].Position = new TimeSpan(0, 0, 1);
    mygif[tmpkey].Play();
}

【讨论】:

  • LoadGifDetailScreen 上没有发生任何适用的事情,而 Deactivated 方法只是将窗口始终放在顶部,所以不用担心。这是好东西!稍后让我试试这个代码,我会告诉你的。
  • 另外,你有什么理由使用枚举而不是字典或列表?只是好奇。
  • 您的代码运行良好,只是它没有显示最后一个元素。不过没有抛出任何错误。
  • 我已将整个源代码添加到问题中以显示结果。
【解决方案2】:

这是来自 NETscape 帮助的完整答案。我不得不重新排列一些代码以使其正常运行。

    int spacer = 2;
    int bigspacer;
    double toolOpacity = 1;
    double windowWidth = 50;
    double windowHeight = 50;
    double totalwidth;
    double centerApp;
    double screenWidth = System.Windows.SystemParameters.PrimaryScreenWidth;
    double screenHeight = System.Windows.SystemParameters.PrimaryScreenHeight;

    List<MediaElement> mygif;
    List<Border> gborder;
    List<DoubleAnimation> anim2;
    List<bool> animsact;
    Dictionary<int, string> GifList = new Dictionary<int, string>();
    int _pos = 0;
    Canvas GifCanvas;
    Grid GifBrowserGrid = new Grid();
    private int position
    {
        get
        {
            return _pos;
        }
        set
        {
            _pos = value;
            //Console.WriteLine(_pos);
        }
    }
    public MainWindow()
    {
        InitializeComponent();

        Window GifBrowserCmd = new Window();
        GifBrowserCmd.ShowInTaskbar = false;
        GifBrowserCmd.Width = 200;
        GifBrowserCmd.Height = screenHeight * .8;
        GifBrowserCmd.Left = screenWidth - GifBrowserCmd.Width;
        GifBrowserCmd.Top = screenHeight * .1;
        GifBrowserCmd.WindowStyle = System.Windows.WindowStyle.None;
        GifBrowserCmd.ResizeMode = System.Windows.ResizeMode.NoResize;
        GifBrowserCmd.Background = Brushes.Black;
        GifBrowserCmd.AllowsTransparency = true;
        GifBrowserCmd.Opacity = toolOpacity;
        GifCanvas = new Canvas();
        GifList = new Dictionary<int, string>();
        string[] filesArray = Directory.GetFiles("D:\\Images\\Animated Images\\");

        mygif = Enumerable.Range(0, 20).Select(d => new MediaElement()).ToList();
        gborder = Enumerable.Range(0, 30).Select(d => new Border()).ToList();
        anim2 = Enumerable.Range(0, 30).Select(d => new DoubleAnimation()).ToList();
        animsact = Enumerable.Range(0, 30).Select(d => false).ToList();
        GifCanvas = new Canvas();
        int brdr_height = 150;
        GifCanvas.Height = brdr_height * mygif.Count();

        for (int i = 0; i < mygif.Count(); i++)
        {
            GifList.Add(i, filesArray[i]);
            mygif[i] = new MediaElement();
            mygif[i].Source = new Uri(@filesArray[i]);
            gborder[i] = new Border();

            //Setup MediaElement
            mygif[i].UnloadedBehavior = MediaState.Play;
            mygif[i].LoadedBehavior = MediaState.Manual;
            mygif[i].MediaEnded += MediaEndedHandler;
            mygif[i].PreviewMouseLeftButtonDown += PreviewMouseLeftButtonDownHandler;
            mygif[i].MediaOpened += MediaOpened;

            mygif[i].Stretch = Stretch.Uniform;
            mygif[i].Position = TimeSpan.FromMilliseconds(1);
            mygif[i].Play();

            //Setup Border
            gborder[i].BorderBrush = Brushes.White;
            gborder[i].BorderThickness = new Thickness(3, 3, 3, 3);
            gborder[i].CornerRadius = new CornerRadius(8, 8, 8, 8);
            gborder[i].Child = mygif[i];
            gborder[i].Width = 200;
            gborder[i].Height = brdr_height;

            GifCanvas.Children.Add(gborder[i]);
            Canvas.SetTop(gborder[i], (i * gborder[i].Height) + (bigspacer * i));// - gborder[i].Height);
            Canvas.SetLeft(gborder[i], gborder[i].Width);
            //Comment the below line out to see if shows them all has an effect
            //gborder[i].Visibility = System.Windows.Visibility.Hidden;
        }

        ScrollViewer sv1 = new ScrollViewer();
        sv1.CanContentScroll = true;
        sv1.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
        sv1.Height = GifBrowserCmd.Height;
        sv1.Content = GifCanvas;
        GifBrowserGrid.Children.Add(sv1);
        GifBrowserCmd.Content = GifBrowserGrid;
        GifBrowserCmd.Show();
        //GifBrowserCmd.Deactivated += GifListCmd_Deactivated;
    }

    private void MediaOpened(object sender, RoutedEventArgs e)
    {
        MediaElement tmp = (MediaElement)sender;
        int tmpkey = 0;
        string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
        if (GifList.ContainsValue(searchstring))
        {
            tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
            //tmpkey--;
        }
        TranslateTransform trans = new TranslateTransform();
        gborder[tmpkey].RenderTransform = trans;
        anim2[tmpkey] = new DoubleAnimation(gborder[tmpkey].Width, 0 - gborder[tmpkey].Width, TimeSpan.FromSeconds(.25));
        anim2[tmpkey].Completed += AnimationCompleted;
        if (tmpkey == 0)
        {
            gborder[(tmpkey)].Visibility = System.Windows.Visibility.Visible;
            trans.BeginAnimation(TranslateTransform.XProperty, anim2[(tmpkey)]);
            position++;
        }
    }

    private void AnimationCompleted(object sender, EventArgs e)
    {
        if (position < mygif.Count())
        {
            try
            {
            bool changed = false;
            if (position == 19)
            {
                changed = true;
            }
                gborder[position].Visibility = System.Windows.Visibility.Visible;
                gborder[position].RenderTransform = new TranslateTransform();
                gborder[position].RenderTransform.BeginAnimation(TranslateTransform.XProperty, anim2[position++]);

            }
            catch (Exception f)
            {
                MessageBox.Show(f.InnerException.Data.ToString());
            }
        }
    }

    private void PreviewMouseLeftButtonDownHandler(object sender, MouseButtonEventArgs e)
    {
        MediaElement tmp = (MediaElement)sender;
        int tmpkey = 0;
        string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
        if (GifList.ContainsValue(searchstring))
        {
            tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
            //LoadGifDetailScreen(tmpkey);
        }
        else
        {
            MessageBox.Show("Couldn't find gif in Dictionary!");
        }
    }

    private void MediaEndedHandler(object sender, RoutedEventArgs e)
    {
        MediaElement tmp = (MediaElement)sender;
        int tmpkey = 0;
        string searchstring = tmp.Source.AbsolutePath.ToString().Replace("%20", " ").Replace("/", @"\").Replace("\\", @"\");
        if (GifList.ContainsValue(searchstring))
        {
            tmpkey = GifList.FirstOrDefault(x => x.Value == searchstring).Key;
        }
        mygif[tmpkey].Position = new TimeSpan(0, 0, 1);
        mygif[tmpkey].Play();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多