日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

WPF:仿WIN7窗体打开关闭效果

發(fā)布時(shí)間:2025/3/13 asp.net 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF:仿WIN7窗体打开关闭效果 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

WIN7系統(tǒng)里面有很多很炫的動(dòng)畫效果,今天來模仿一下最常見的窗體打開關(guān)閉時(shí)的動(dòng)畫效果,比如打開一窗體,頂部靠外傾斜,透明漸變顯示,關(guān)閉窗口,則反之的效果。

先新建一窗體,因?yàn)橛邢蚯跋蚝髢A斜效果,為了省事,引用一DLL,3DTools。

也就是創(chuàng)建一個(gè)3D模型,然后對(duì)它添加動(dòng)畫。

講一下用到3DTools 的地方。

先引用

xmlns:tool="clr-namespace:_3DTools;assembly=3DTools" <Grid><tool:Interactive3DDecorator ContainsInk="False"><Viewport3D x:Name="view" Opacity="0"><Viewport3D.Camera><PerspectiveCamera Position="0, 0.5, 3.2"/></Viewport3D.Camera><tool:InteractiveVisual3DGeometry="{StaticResource PlaneMesh}"Visual="{StaticResource Visual}" IsBackVisible="False"><tool:InteractiveVisual3D.Transform><Transform3DGroup><RotateTransform3D><RotateTransform3D.Rotation><AxisAngleRotation3D x:Name="axis" Angle="0" Axis="1 0 0" /></RotateTransform3D.Rotation></RotateTransform3D><ScaleTransform3D x:Name="scale" ScaleX="1" ScaleY="1" ScaleZ="1"/></Transform3DGroup></tool:InteractiveVisual3D.Transform></tool:InteractiveVisual3D><ModelVisual3D><ModelVisual3D.Content><DirectionalLight Color="#FFFFFFFF"/></ModelVisual3D.Content></ModelVisual3D></Viewport3D></tool:Interactive3DDecorator></Grid>

與普通的創(chuàng)建3D模型不同,在Viewport3D外面加上一層Interactive3DDecorator,便可以操作上面的控件,而不是僅僅當(dāng)作Brush畫上去的。

然后為InteractiveVisual3D設(shè)置屬性,Geometry 就是上一節(jié)講的MeshGeometry3D,這個(gè)是和普通的一樣的

<!-- 3D Models --><MeshGeometry3D x:Key="PlaneMesh" Positions="-1,2.5,0 -1,-1,0 1,-1,0 1,2.5,0" Normals="0 0 1, 0 0 1, 0 0 1, 0 0 1"TextureCoordinates="0,0 0,1 1,1 1,0" TriangleIndices="0 1 2 2 3 0"/>

Visual就根據(jù)你的情況來設(shè)置了,什么樣的UI就寫什么Visual。

這里要說一下為了更好的效果要對(duì)窗體做下外觀修改:

WindowStyle="None" WindowStartupLocation="CenterScreen" Background="Transparent" AllowsTransparency="True"

在Window 的屬性里設(shè)置這些。

當(dāng)然你也可以自定義控件,模仿得更像一下比如:

?下面就開始寫動(dòng)畫了

<Window.Triggers><EventTrigger RoutedEvent="Window.Loaded"><BeginStoryboard><Storyboard><DoubleAnimation From="0.75" To="1" Storyboard.TargetName="scale"Storyboard.TargetProperty="ScaleX" Duration="0:0:0.35"/><DoubleAnimation From="0.75" To="1" Storyboard.TargetName="scale"Storyboard.TargetProperty="ScaleY" Duration="0:0:0.35"/><DoubleAnimation From="13" To="0" Storyboard.TargetName="axis"Storyboard.TargetProperty="Angle" Duration="0:0:0.35"/><DoubleAnimation From="0" To="1" Storyboard.TargetName="view"Storyboard.TargetProperty="Opacity" Duration="0:0:0.35"/></Storyboard></BeginStoryboard></EventTrigger></Window.Triggers>

這個(gè)就是打開窗體時(shí)的動(dòng)畫,里面是對(duì)Opacity,ScaleTransform3D,AxisAngleRotation3D同時(shí)進(jìn)行了動(dòng)畫,效果還不錯(cuò)。

然后就是關(guān)閉動(dòng)畫了

<!--Close Window Storyboard--><Storyboard x:Key="closeStory"><DoubleAnimation From="1" To="0.75" Storyboard.TargetName="scale"Storyboard.TargetProperty="ScaleX" Duration="0:0:0.3"/><DoubleAnimation From="1" To="0.75" Storyboard.TargetName="scale"Storyboard.TargetProperty="ScaleY" Duration="0:0:0.3"/><DoubleAnimation From="0" To="-15" Storyboard.TargetName="axis"Storyboard.TargetProperty="Angle" Duration="0:0:0.25"/><DoubleAnimation From="1" To="0" Storyboard.TargetName="view"Storyboard.TargetProperty="Opacity" Duration="0:0:0.3"/></Storyboard>

上面的Geometry,Visual還有這個(gè)closeStory都是寫在Window.Resources的。

那我們來寫一下點(diǎn)擊關(guān)閉按鈕后的動(dòng)畫處理。

?先要為窗體添加一個(gè)關(guān)閉事件:

Closing="window_Closing"

然后是在后臺(tái)代碼:

bool isclose = false;private void window_Closing(object sender, System.ComponentModel.CancelEventArgs e){if (!isclose){//找到資源定義的故事板
Storyboard story
= this.Resources["closeStory"] as Storyboard;story.Completed += delegate{isclose = true;this.Close();};story.Begin();e.Cancel = true;}}

聲明一個(gè)bool變量,用來記錄是否已進(jìn)行完動(dòng)畫效果。
if isclose == false,

就找到資源定義的動(dòng)畫,讓它Begin,不要忘了添加一個(gè)Completed事件。

重要的一點(diǎn)是,e.Cancel = true; 要寫在 Begin 后面,否則會(huì)達(dá)不到效果。

然后就是當(dāng)動(dòng)畫結(jié)束后觸發(fā)Completed事件,為 isclose 賦值為 true。

再關(guān)閉一次窗體。就會(huì)又觸發(fā)window_Closing。但是這次isclose == true,所以不執(zhí)行括號(hào)內(nèi)的代碼,然后直接結(jié)束。

代碼很簡(jiǎn)單,主要還是 3DTools 省了不少事,值得好好研究下。

?

轉(zhuǎn)載于:https://www.cnblogs.com/Walsh/archive/2012/05/27/2519896.html

總結(jié)

以上是生活随笔為你收集整理的WPF:仿WIN7窗体打开关闭效果的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。