Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使文本字幕在WPF中平滑淡入淡出_C#_Wpf_Xaml_Animation - Fatal编程技术网

C# 如何使文本字幕在WPF中平滑淡入淡出

C# 如何使文本字幕在WPF中平滑淡入淡出,c#,wpf,xaml,animation,C#,Wpf,Xaml,Animation,我有一个WPF画布,上面有一个文本块和一个图像。文本已设置动画,但看起来并不平滑。我尝试了多种不同FPS设置和持续时间的组合,但效果不会更好。 我还想让文本在开始和结束时淡入淡出。但我没有找到这样做的方法 目前看来: 我如何才能顺利获得动画?如何使其平滑淡入/淡出? 在您询问之前,我需要显示不可见的窗口,因为我使用,并且该组件需要一个HWND 以下是画布xaml: <Canvas x:Name="canMain" HorizontalAlignment="Stretch" Vertica

我有一个WPF画布,上面有一个文本块和一个图像。文本已设置动画,但看起来并不平滑。我尝试了多种不同FPS设置和持续时间的组合,但效果不会更好。 我还想让文本在开始和结束时淡入淡出。但我没有找到这样做的方法

目前看来:

我如何才能顺利获得动画?如何使其平滑淡入/淡出?

在您询问之前,我需要显示不可见的窗口,因为我使用,并且该组件需要一个HWND

以下是画布xaml:

<Canvas x:Name="canMain" HorizontalAlignment="Stretch" VerticalAlignment="Center">
    <Border x:Name="boLogo"  Panel.ZIndex="2" Height="40" Background="Gray" Canvas.Left="0" Canvas.Top="-20">
        <Image Height="39" Width="auto" Margin="5, 0, 5, 0" Source="pack://siteoforigin:,,,/Resources/Logo.png" />
    </Border>
    <TextBlock x:Name="tbInfo" Panel.ZIndex="1"  Visibility="Hidden" RenderOptions.BitmapScalingMode="NearestNeighbor" FontSize="32" TextOptions.TextFormattingMode="Display" TextOptions.TextRenderingMode="ClearType" FontFamily="Arial" FontWeight="Bold" Padding="5" HorizontalAlignment="Stretch" VerticalAlignment="Center">
        <TextBlock.RenderTransform>
            <TranslateTransform x:Name="AnimatedTranslateTransform" X="0" Y="0" />
        </TextBlock.RenderTransform>
    </TextBlock>
</Canvas>
public void ShowWindow(Brush fontColor, Brush backgroundColor, string str) {
        var helper = new WindowInteropHelper(this);
        helper.EnsureHandle();
        tbInfo.Foreground = fontColor;
        this.Background = backgroundColor;

        tbInfo.Text = str;
        this.Height = 39;
        this.Width = SystemParameters.WorkArea.Width;
        this.Left = SystemParameters.PrimaryScreenWidth - this.Width;

        ShowWindowInvisible();
        WpfAppBar.AppBarFunctions.SetAppBar(this, WpfAppBar.ABEdge.Top);
        Visibility = Visibility.Visible;

        int duration = 10 + str.Length / 5;

        TextMarquee(duration);
    }

private void TextMarquee(int duration)
    {
        Timeline.DesiredFrameRateProperty.OverrideMetadata(
            typeof(Timeline),
            new FrameworkPropertyMetadata { DefaultValue = 60 }
        );

        double height = canMain.ActualHeight - tbInfo.ActualHeight;
        tbInfo.Margin = new Thickness(0, height / 2, 0, 0);
        DoubleAnimation doubleAnimation = new DoubleAnimation();
        doubleAnimation.From = canMain.ActualWidth;
        doubleAnimation.To = tbInfo.ActualWidth *-1;
        doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
        doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(duration));
        tbInfo.BeginAnimation(Canvas.LeftProperty, doubleAnimation);
        tbInfo.Visibility = Visibility.Visible;
    }

private void ShowWindowInvisible()
    {
        var width = Width;
        var height = Height;
        var windowStyle = WindowStyle;
        var showInTaskbar = ShowInTaskbar;
        var showActivated = ShowActivated;

        Width = 0;
        Height = 0;
        WindowStyle = WindowStyle.None;
        ShowInTaskbar = false;
        ShowActivated = false;
        Show();
        Visibility = Visibility.Hidden;

        Width = width;
        Height = height;
        WindowStyle = windowStyle;
        ShowInTaskbar = showInTaskbar;
        ShowActivated = showActivated;
    }