zoukankan      html  css  js  c++  java
  • WPF加载启动画面

    main.jpg 介绍 在MSN messenger的最后一个版本中,当你登录到你的帐户时,你可以注意到简单的动画文本加载。我尝试做一些类似的东西,使应用程序加载看起来专业。 一步一步 创建启动窗口 向WPF应用程序添加一个新窗口。你可以叫它Splashwindow,使窗口无边框和最顶端,你需要添加一些属性,如下所示,添加到XAML在窗口标签或使用属性面板。 隐藏,复制Code

    WindowStyle="None" WindowStartupLocation="CenterScreen" 
    	ResizeMode="NoResize" ShowInTaskbar="False" Topmost="True"

    改变背景 默认情况下,新窗口内容包含一个网格。我们可以改变网格背景使用线性渐变画笔添加以下代码: 隐藏,复制Code

    <Grid.Background>
               <LinearGradientBrushEndPoint="0.5,1"StartPoint="0.5,0">
                   <GradientStopColor="#FFB9BBFF"Offset="0"/>
                   <GradientStopColor="White"Offset="1"/>
                   <GradientStopColor="White"Offset="0.72"/>
               </LinearGradientBrush>
           </Grid.Background>
    

    它会是这样的: intial.jpg 添加不透明蒙版 要产生淡入效果,我们需要创建第二个网格,用不透明遮罩覆盖窗口的下半部分。会导致衰落效应时,文本从边界网格的中心,将透明面具的上下部分第二网格,并将文本添加到网格显示加载信息,显示的顺序从中间用新的文本然后搬到隐藏。 下面的XAML代码创建带有文本框的掩码网格: 隐藏,复制Code

    <GridVerticalAlignment="Bottom"HorizontalAlignment="Stretch"Height="150"Background="#00FFFFFF">
               <Grid.OpacityMask>
                   <LinearGradientBrushEndPoint="0.5,1"StartPoint="0.5,0">
                       <GradientStopColor="#00000000"Offset="0.283"/>
                       <GradientStopColor="#00000000"Offset="0.778"/>
                       <GradientStopColor="White"Offset="0.491"/>
                   </LinearGradientBrush>
               </Grid.OpacityMask>
               <TextBlockx:Name="txtLoading"TextAlignment="Left"FontSize="16"FontWeight="Normal"Foreground="#FF052045"Text="Beta 0.9"TextWrapping="Wrap"VerticalAlignment="Bottom"HorizontalAlignment="Right"Width="421">
               <TextBlock.Effect>
        <DropShadowEffectBlurRadius="6"Color="#FF797979"Direction="201"Opacity="0.68"ShadowDepth="3"/>
                   </TextBlock.Effect>
               </TextBlock>
           </Grid>
    

    网格背景值=#00FFFFFF是完全透明的。我们不需要显示网格,但没有背景,遮罩将不会工作。您可以注意到,在前面的XAML中,textblock具有阴影效果。 在设计视图中,它看起来是这样的: masked.jpg 创建动画 在WPF中,你可以定义动画。你不需要自己写。在Microsoft Blend中,只需要添加一个新的故事板,定义关键帧,并像Flash一样做出改变,但是WPF会为动画生成一个可读的格式。动画将在窗口资源标签中定义并通过键访问。下面的代码显示了两个故事板,每个故事板都有一个1秒的持续时间,只是改变textblock的底部边缘,根据不透明度掩码从隐藏区域移动到可见区域,反之亦然。 隐藏,复制Code

    <Window.Resources>
            <Storyboardx:Key="showStoryBoard">
                <ThicknessAnimationUsingKeyFramesStoryboard.TargetProperty=
    		"(FrameworkElement.Margin)"Storyboard.TargetName="txtLoading">
                    <EasingThicknessKeyFrameKeyTime="0:0:0"Value="0,0,0,0"/>
                    <EasingThicknessKeyFrameKeyTime="0:0:1"Value="0,0,0,70"/>
                </ThicknessAnimationUsingKeyFrames>
            </Storyboard>
            
            <Storyboardx:Key="HideStoryBoard">
                <ThicknessAnimationUsingKeyFramesStoryboard.TargetProperty=
    		"(FrameworkElement.Margin)"Storyboard.TargetName="txtLoading">
                    <EasingThicknessKeyFrameKeyTime="0:0:0"Value="0,0,0,70"/>
                    <EasingThicknessKeyFrameKeyTime="0:0:1"Value="0,0,0,150"/>
                </ThicknessAnimationUsingKeyFrames>
            </Storyboard>
        </Window.Resources>

    使用后面的代码 现在我们已经创建了XAML中需要的内容。在后面的代码中,我们将创建一个线程来做加载工作,并使动画到文本,首先我们需要访问动画,定义两个故事板对象来访问窗口资源故事板。 隐藏,复制Code

    Storyboard Showboard;
    Storyboard Hideboard;
    

    在InitializeComponent()调用之后,通过以下代码访问窗口资源: 隐藏,复制Code

    Showboard = this.Resources["showStoryBoard"] as Storyboard;
    Hideboard = this.Resources["HideStoryBoard"] as Storyboard;

    创建两个函数-一个显示文本,一个隐藏如下: 隐藏,复制Code

     private void showText(string txt)
           {
               txtLoading.Text = txt;
               BeginStoryboard(Showboard);
           }
    private void hideText()
           {
               BeginStoryboard(Hideboard);
           }
    

    我们需要为每个函数创建委托,以使调用形式的加载头如下: 隐藏,复制Code

    private void load()
          {
              Thread.Sleep(1000);
              this.Dispatcher.Invoke(showDelegate, "first data to loading");
              Thread.Sleep(2000);
              //do some loading work
              this.Dispatcher.Invoke(hideDelegate);
    
              Thread.Sleep(2000);
              this.Dispatcher.Invoke(showDelegate, "second data loading");
              Thread.Sleep(2000);
              //do some loading work
              this.Dispatcher.Invoke(hideDelegate);
    
              Thread.Sleep(2000);
              this.Dispatcher.Invoke(showDelegate, "last data loading");
              Thread.Sleep(2000);
               //do some loading work
              this.Dispatcher.Invoke(hideDelegate);
    
              //close the window
              Thread.Sleep(2000);
              this.Dispatcher.Invoke(DispatcherPriority.Normal,
          (Action)delegate() { Close(); });
          }
    

    显示闪 有许多方式来显示闪屏,但最简单的方式,我认为只是添加以下在InitializeComponent在主窗口: 隐藏,复制Code

    new SplashWindow().ShowDialog();
    

    我希望这对你们有用。 的兴趣点 主要的一点是使用不透明掩模和访问故事板背后的形式代码,以及WPF中动画的力量。 历史 2010年10月10日:初任 本文转载于:http://www.diyabc.com/frontweb/news12007.html

  • 相关阅读:
    Yii Framework 开发教程: 总结
    code first 如何创建索引字段
    Entity Framework 使用 Left Join
    如何查看IIS并发连接数
    c# List<int> 转 string 以及 string [] 转 List<int>
    linq中如何在join中指定多个条件
    关于学习的感悟
    c# 的访问修饰符是private 还是 internal?
    C# 与 .Net 3.5 高级程序设计(第四版) 读书笔记(一)
    解决Excel 提示向程序发送命令时出现错误
  • 原文地址:https://www.cnblogs.com/Dincat/p/13473462.html
Copyright © 2011-2022 走看看