Exemple #1
0
        /// <summary>
        /// 添加顶部和底部弹幕
        /// </summary>
        /// <param name="model"></param>
        public async void AddTop(DanmuModel model, bool isMyDanmu)
        {
            TextBlock txt1 = new TextBlock
            {
                Foreground = model.DanColor,
            };
            TextBlock txt2 = new TextBlock
            {
                Foreground = new SolidColorBrush(Colors.Black),
                Margin     = new Thickness(1),
            };
            Grid grid = new Grid
            {
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment   = VerticalAlignment.Top,
                DataContext         = model,
            };

            if (isMyDanmu)
            {
                grid.BorderBrush     = new SolidColorBrush(Colors.HotPink);
                grid.BorderThickness = new Thickness(2);
            }
            double size = double.Parse(model.Size);

            if (size == 25)
            {
                txt2.FontSize = fontsize;
                txt1.FontSize = fontsize;
            }
            else
            {
                txt2.FontSize = fontsize - 4;
                txt1.FontSize = fontsize - 4;
            }
            txt1.Text = txt2.Text = model.Message;
            grid.Children.Add(txt2);
            grid.Children.Add(txt1);
            grid.UpdateLayout();
            if (model.Mode == "5")
            {
                top.Children.Add(grid);
                await Task.Delay(5000);

                top.Children.Remove(grid);
            }
            else if (model.Mode == "4")
            {
                bottom.Children.Add(grid);
                await Task.Delay(5000);

                bottom.Children.Remove(grid);
            }
        }
Exemple #2
0
        /// <summary>
        /// 添加滚动弹幕
        /// </summary>
        /// <param name="model"></param>
        public async void AddBasic(DanmuModel model, bool isMyDanmu)
        {
            TextBlock txt1 = new TextBlock
            {
                Foreground = model.DanColor,
            };
            TextBlock txt2 = new TextBlock
            {
                Foreground = new SolidColorBrush(Colors.Black),
                Margin     = new Thickness(1),
            };
            Grid grid = new Grid
            {
                HorizontalAlignment = HorizontalAlignment.Left,
                VerticalAlignment   = VerticalAlignment.Top,
                DataContext         = model,
            };

            if (isMyDanmu)
            {
                grid.BorderBrush     = new SolidColorBrush(Colors.HotPink);
                grid.BorderThickness = new Thickness(2);
            }
            double size = double.Parse(model.Size);

            if (size == 25)
            {
                txt2.FontSize = fontsize;
                txt1.FontSize = fontsize;
            }
            else
            {
                txt2.FontSize = fontsize - 4;
                txt1.FontSize = fontsize - 4;
            }
            txt1.Text = txt2.Text = model.Message;
            grid.Children.Add(txt2);
            grid.Children.Add(txt1);
            TranslateTransform move = new TranslateTransform();

            move.X = grid_0.ActualWidth;
            grid.RenderTransform = move;
            grid_0.Children.Add(grid);
            Grid.SetRow(grid, row);
            row++;
            if (row == 10)
            {
                row = 0;
            }
            grid.DataContext = model;
            grid.UpdateLayout();
            Storyboard      sty = new Storyboard();
            DoubleAnimation ani = new DoubleAnimation
            {
                Duration = new Duration(TimeSpan.FromSeconds(speed)),
                To       = -(grid.ActualWidth),
            };

            sty.Children.Add(ani);
            Storyboard.SetTarget(ani, move);
            Storyboard.SetTargetProperty(ani, "X");
            grid.Resources.Remove("justintimeStoryboard");
            grid.Resources.Add("sty", sty);
            sty.Begin();
            await Task.Run(async() =>
            {
                int i = 0;
                while (true)
                {
                    if (!isPlaying)
                    {
                        await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
                            sty.Pause();
                        });
                    }
                    else
                    {
                        if (i == speed * 2)
                        {
                            break;
                        }
                        i++;
                        await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
                            sty.Resume();
                        });
                    }
                    await Task.Delay(500);
                }
            });

            grid_0.Children.Remove(grid);
        }