版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
27/30高級(jí)WPF動(dòng)畫(huà)技術(shù)探索第一部分WPF動(dòng)畫(huà)架構(gòu)概述 2第二部分可變時(shí)長(zhǎng)的動(dòng)畫(huà) 4第三部分時(shí)間線(xiàn)動(dòng)畫(huà)的嵌套 10第四部分Storyboard優(yōu)化技巧 12第五部分雙向動(dòng)畫(huà)和反向動(dòng)畫(huà) 16第六部分自定動(dòng)畫(huà)行為 20第七部分局部動(dòng)畫(huà)和動(dòng)畫(huà)遮罩 23第八部分性能優(yōu)化和動(dòng)畫(huà)調(diào)試 27
第一部分WPF動(dòng)畫(huà)架構(gòu)概述WPF動(dòng)畫(huà)架構(gòu)概述
WindowsPresentationFoundation(WPF)采用分層動(dòng)畫(huà)架構(gòu),提供了對(duì)動(dòng)畫(huà)功能的全面控制。該架構(gòu)由以下層組成:
動(dòng)畫(huà)時(shí)序(Timeline)
*動(dòng)畫(huà)時(shí)序充當(dāng)動(dòng)畫(huà)時(shí)間軸,定義動(dòng)畫(huà)屬性隨時(shí)間的變化方式。
*時(shí)序可以通過(guò)多種方式定義,包括持續(xù)時(shí)間、延遲和循環(huán)模式。
*最常用的時(shí)序類(lèi)型包括Storyboard、DoubleAnimation和ObjectAnimation。
動(dòng)畫(huà)對(duì)象
*動(dòng)畫(huà)對(duì)象指直接進(jìn)行動(dòng)畫(huà)處理的屬性。
*可以在WPF的任何依賴(lài)屬性(包括自定義屬性)上執(zhí)行動(dòng)畫(huà)。
*依賴(lài)屬性提供了一種機(jī)制來(lái)存儲(chǔ)和獲取可動(dòng)畫(huà)的屬性值。
動(dòng)畫(huà)值
*動(dòng)畫(huà)值表示動(dòng)畫(huà)對(duì)象在給定時(shí)間點(diǎn)的目標(biāo)值。
*動(dòng)畫(huà)值可以是任何.NET數(shù)據(jù)類(lèi)型或自定義對(duì)象。
*在動(dòng)畫(huà)過(guò)程中,動(dòng)畫(huà)時(shí)序計(jì)算出并在目標(biāo)動(dòng)畫(huà)屬性上設(shè)置值。
動(dòng)畫(huà)轉(zhuǎn)換
*動(dòng)畫(huà)轉(zhuǎn)換允許對(duì)動(dòng)畫(huà)值進(jìn)行轉(zhuǎn)換,從而產(chǎn)生自定義動(dòng)畫(huà)效果。
*例如,可以應(yīng)用轉(zhuǎn)換來(lái)減緩動(dòng)畫(huà)或改變動(dòng)畫(huà)方向。
*WPF提供了一組內(nèi)置的轉(zhuǎn)換,但也可以創(chuàng)建自定義轉(zhuǎn)換。
動(dòng)畫(huà)事件處理程序
*動(dòng)畫(huà)事件處理程序允許在動(dòng)畫(huà)的特定時(shí)間點(diǎn)執(zhí)行代碼。
*事件處理程序可用于觸發(fā)其他動(dòng)畫(huà)、更改UI控件狀態(tài)或執(zhí)行其他任務(wù)。
*最常用的動(dòng)畫(huà)事件包括Completed、Changed和CurrentTimeInvalidated。
動(dòng)畫(huà)類(lèi)型
WPF支持多種動(dòng)畫(huà)類(lèi)型,包括:
*值動(dòng)畫(huà):在依賴(lài)屬性上執(zhí)行動(dòng)畫(huà),如DoubleAnimation和ObjectAnimation。
*關(guān)鍵幀動(dòng)畫(huà):允許在特定時(shí)間點(diǎn)指定動(dòng)畫(huà)值,如SplineTimeline和KeyFrameAnimation。
*預(yù)覽動(dòng)畫(huà):創(chuàng)建動(dòng)畫(huà)對(duì)象的預(yù)覽,如PreviewTimeline。
*行為動(dòng)畫(huà):響應(yīng)特定事件或條件觸發(fā)動(dòng)畫(huà),如BehaviorAnimation。
動(dòng)畫(huà)管理
WPF提供了多種機(jī)制來(lái)管理動(dòng)畫(huà),包括:
*Storyboard:包含多個(gè)動(dòng)畫(huà)時(shí)序并協(xié)調(diào)它們之間的播放。
*AnimationClock:跟蹤動(dòng)畫(huà)時(shí)序的播放狀態(tài)。
*TimelineGroup:組合多個(gè)動(dòng)畫(huà)時(shí)序并協(xié)調(diào)它們的播放。
*TimelineControl:提供對(duì)動(dòng)畫(huà)時(shí)序的編程控制,如Pause()和Resume()方法。第二部分可變時(shí)長(zhǎng)的動(dòng)畫(huà)關(guān)鍵詞關(guān)鍵要點(diǎn)非線(xiàn)性動(dòng)畫(huà)
1.允許動(dòng)畫(huà)在時(shí)間線(xiàn)上以非恒定速率移動(dòng),實(shí)現(xiàn)復(fù)雜的運(yùn)動(dòng)效果。
2.利用貝塞爾曲線(xiàn)或其他非線(xiàn)性函數(shù)控制動(dòng)畫(huà)速度,創(chuàng)建流暢而自然的過(guò)渡。
3.可以用于創(chuàng)建復(fù)雜動(dòng)畫(huà),例如跳躍、反彈和彈性運(yùn)動(dòng)。
可變速率動(dòng)畫(huà)
1.提供按需調(diào)整動(dòng)畫(huà)速率的能力,實(shí)現(xiàn)更精細(xì)的控制。
2.允許基于外部條件或用戶(hù)輸入動(dòng)態(tài)更改動(dòng)畫(huà)速度,實(shí)現(xiàn)交互性和響應(yīng)性。
3.可以用來(lái)模擬現(xiàn)實(shí)世界中的運(yùn)動(dòng),例如風(fēng)速變化或重力影響。
段落動(dòng)畫(huà)
1.將動(dòng)畫(huà)分解為一系列較小的段落,允許分階段控制動(dòng)畫(huà)行為。
2.通過(guò)向各個(gè)段落指定持續(xù)時(shí)間和速度,實(shí)現(xiàn)復(fù)雜的組合動(dòng)畫(huà)效果。
3.提供了更大的靈活性和可定制性,允許根據(jù)需要調(diào)整動(dòng)畫(huà)的各個(gè)方面。
反向動(dòng)畫(huà)
1.允許動(dòng)畫(huà)反向播放,實(shí)現(xiàn)重復(fù)或逆序動(dòng)畫(huà)效果。
2.使用鏡像時(shí)間線(xiàn)或時(shí)間映射函數(shù)實(shí)現(xiàn)反向播放,創(chuàng)造獨(dú)特的視覺(jué)效果。
3.可用于創(chuàng)建動(dòng)畫(huà)回放或創(chuàng)建類(lèi)似于時(shí)間倒流的動(dòng)畫(huà)序列。
關(guān)鍵幀動(dòng)畫(huà)
1.通過(guò)指定動(dòng)畫(huà)的初始和結(jié)束狀態(tài)來(lái)控制動(dòng)畫(huà),允許創(chuàng)建復(fù)雜和動(dòng)態(tài)的動(dòng)畫(huà)效果。
2.使用時(shí)間線(xiàn)標(biāo)記關(guān)鍵幀,并通過(guò)插值計(jì)算中間狀態(tài),實(shí)現(xiàn)流暢的過(guò)渡。
3.提供了對(duì)動(dòng)畫(huà)的精細(xì)控制,允許創(chuàng)建復(fù)雜的路徑和運(yùn)動(dòng)。
并行和序列動(dòng)畫(huà)
1.允許并行或順序執(zhí)行多個(gè)動(dòng)畫(huà),實(shí)現(xiàn)復(fù)雜的動(dòng)畫(huà)場(chǎng)景。
2.通過(guò)時(shí)間線(xiàn)對(duì)象或動(dòng)畫(huà)組同步動(dòng)畫(huà)播放,創(chuàng)建協(xié)調(diào)的動(dòng)畫(huà)效果。
3.可以用來(lái)創(chuàng)建復(fù)雜的動(dòng)畫(huà)序列,例如角色移動(dòng)和背景變化同時(shí)發(fā)生。可變時(shí)長(zhǎng)的動(dòng)畫(huà)
在WindowsPresentationFoundation(WPF)中,動(dòng)畫(huà)通常以固定的持續(xù)時(shí)間運(yùn)行,但有方法可以創(chuàng)建可變時(shí)長(zhǎng)的動(dòng)畫(huà)。有兩種方法:
使用`Duration`屬性
一種方法是使用`Duration`屬性。`Duration`屬性指定動(dòng)畫(huà)的持續(xù)時(shí)間,可以是`TimeSpan`或`Double`。通過(guò)將`Duration`屬性設(shè)置為`Automatic`,動(dòng)畫(huà)將根據(jù)動(dòng)畫(huà)的對(duì)象持續(xù)運(yùn)行。
`Automatic`持續(xù)時(shí)間非常適合用于非確定性動(dòng)畫(huà),例如基于用戶(hù)輸入或數(shù)據(jù)源的動(dòng)畫(huà)。以下示例顯示如何使用`Automatic`持續(xù)時(shí)間:
```
<Windowx:Class="WpfApp1.MainWindow"
xmlns="/winfx/2006/xaml/presentation"
xmlns:x="/winfx/2006/xaml"
Title="MainWindow"Height="350"Width="525">
<Rectanglex:Name="rect"Height="100"Width="100"Fill="Red">
<Rectangle.RenderTransform>
<TranslateTransformx:Name="anim"/>
</Rectangle.RenderTransform>
</Rectangle>
<ButtonContent="ClickMe"Click="Button_Click"Height="25"Width="100"/>
</Window>
```
```
publicpartialclassMainWindow:Window
publicMainWindow()
InitializeComponent();
anim.BeginAnimation(TranslateTransform.XProperty,newDoubleAnimation()
To=200,
Duration=newDuration(TimeSpan.Zero)
});
}
privatevoidButton_Click(objectsender,RoutedEventArgse)
//Toggletheanimation
if(anim.HasAnimatedProperties)
anim.StopAllAnimations();
}
else
anim.BeginAnimation(TranslateTransform.XProperty,newDoubleAnimation()
To=0,
Duration=newDuration(TimeSpan.Zero)
});
}
}
}
```
使用`SpeedRatio`屬性
另一種方法是使用`SpeedRatio`屬性。`SpeedRatio`屬性允許您調(diào)整動(dòng)畫(huà)的播放速度。默認(rèn)情況下,`SpeedRatio`設(shè)置為1,但可以通過(guò)設(shè)置`SpeedRatio`屬性來(lái)更改。
`SpeedRatio`屬性對(duì)于調(diào)整動(dòng)畫(huà)播放速度非常有用,例如當(dāng)您想要?jiǎng)?chuàng)建一個(gè)慢動(dòng)作或快動(dòng)作動(dòng)畫(huà)時(shí)。以下示例顯示如何使用`SpeedRatio`屬性:
```
<Windowx:Class="WpfApp1.MainWindow"
xmlns="/winfx/2006/xaml/presentation"
xmlns:x="/winfx/2006/xaml"
Title="MainWindow"Height="350"Width="525">
<Rectanglex:Name="rect"Height="100"Width="100"Fill="Red">
<Rectangle.RenderTransform>
<TranslateTransformx:Name="anim"/>
</Rectangle.RenderTransform>
</Rectangle>
<ButtonContent="ClickMe"Click="Button_Click"Height="25"Width="100"/>
</Window>
```
```
publicpartialclassMainWindow:Window
publicMainWindow()
InitializeComponent();
anim.BeginAnimation(TranslateTransform.XProperty,newDoubleAnimation()
To=200,
SpeedRatio=2
});
}
privatevoidButton_Click(objectsender,RoutedEventArgse)
//Toggletheanimation
if(anim.HasAnimatedProperties)
anim.StopAllAnimations();
}
else
anim.BeginAnimation(TranslateTransform.XProperty,newDoubleAnimation()
To=0,
SpeedRatio=4
});
}
}
}
```
比較
`Duration`屬性和`SpeedRatio`屬性都可以用于創(chuàng)建可變時(shí)長(zhǎng)的動(dòng)畫(huà),但它們有不同的用途。`Duration`屬性用于設(shè)置動(dòng)畫(huà)的實(shí)際持續(xù)時(shí)間,而`SpeedRatio`屬性用于調(diào)整動(dòng)畫(huà)的播放速度。
選擇哪種方法取決于動(dòng)畫(huà)的特定要求。如果需要根據(jù)動(dòng)畫(huà)的對(duì)象持續(xù)時(shí)間的動(dòng)畫(huà),則應(yīng)使用`Duration`屬性。如果需要調(diào)整動(dòng)畫(huà)播放速度,則應(yīng)使用`SpeedRatio`屬性。第三部分時(shí)間線(xiàn)動(dòng)畫(huà)的嵌套關(guān)鍵詞關(guān)鍵要點(diǎn)主題名稱(chēng):基于行為的時(shí)間線(xiàn)動(dòng)畫(huà)嵌套
1.利用Behavior觸發(fā)器機(jī)制,通過(guò)自定義行為連接多個(gè)時(shí)間線(xiàn)。
2.允許時(shí)間線(xiàn)在特定條件(如鼠標(biāo)懸停、數(shù)據(jù)更新)下觸發(fā)或停止。
3.增強(qiáng)動(dòng)畫(huà)的靈活性,使其能夠根據(jù)用戶(hù)交互或應(yīng)用程序狀態(tài)進(jìn)行動(dòng)態(tài)調(diào)整。
主題名稱(chēng):關(guān)鍵幀動(dòng)畫(huà)嵌套
時(shí)間線(xiàn)動(dòng)畫(huà)的嵌套
時(shí)間線(xiàn)動(dòng)畫(huà)可以嵌套在其他時(shí)間線(xiàn)中,從而創(chuàng)建復(fù)雜的動(dòng)畫(huà)序列。嵌套時(shí)間線(xiàn)動(dòng)畫(huà)允許開(kāi)發(fā)者對(duì)動(dòng)畫(huà)的各個(gè)方面進(jìn)行更精細(xì)的控制,并創(chuàng)建動(dòng)態(tài)效果。
嵌套時(shí)間線(xiàn)動(dòng)畫(huà)的類(lèi)型
嵌套時(shí)間線(xiàn)動(dòng)畫(huà)有兩種主要類(lèi)型:
*子時(shí)間線(xiàn):在父時(shí)間線(xiàn)上播放的獨(dú)立時(shí)間線(xiàn)。子時(shí)間線(xiàn)可以有自己的子時(shí)間線(xiàn),從而創(chuàng)建層次結(jié)構(gòu)。
*故事板時(shí)間線(xiàn):一組子時(shí)間線(xiàn),它們?cè)谕粫r(shí)間播放。故事板時(shí)間線(xiàn)用于同時(shí)控制多個(gè)對(duì)象的動(dòng)畫(huà)。
嵌套時(shí)間線(xiàn)動(dòng)畫(huà)的優(yōu)點(diǎn)
嵌套時(shí)間線(xiàn)動(dòng)畫(huà)提供了以下優(yōu)點(diǎn):
*靈活性:允許對(duì)動(dòng)畫(huà)的各個(gè)方面進(jìn)行更精細(xì)的控制,例如持續(xù)時(shí)間、延遲和緩動(dòng)效果。
*復(fù)雜效果:嵌套時(shí)間線(xiàn)可以創(chuàng)建復(fù)雜的動(dòng)畫(huà)序列,其中動(dòng)畫(huà)效果相互依存并創(chuàng)建動(dòng)態(tài)效果。
*可重用性:子時(shí)間線(xiàn)可以重用于不同的動(dòng)畫(huà),提高代碼的可重用性和維護(hù)性。
*層次結(jié)構(gòu):使用子時(shí)間線(xiàn)和故事板時(shí)間線(xiàn),可以創(chuàng)建動(dòng)畫(huà)層次結(jié)構(gòu),使動(dòng)畫(huà)更容易管理和組織。
嵌套時(shí)間線(xiàn)動(dòng)畫(huà)的實(shí)現(xiàn)
在WPF中,嵌套時(shí)間線(xiàn)動(dòng)畫(huà)可以使用以下技巧實(shí)現(xiàn):
*子時(shí)間線(xiàn):使用`BeginStoryboard`方法將子時(shí)間線(xiàn)添加到父時(shí)間線(xiàn)。子時(shí)間線(xiàn)可以使用`Storyboard.TargetName`屬性指定目標(biāo)元素。
*故事板時(shí)間線(xiàn):使用`Storyboard.Children`集合將子時(shí)間線(xiàn)添加到故事板時(shí)間線(xiàn)。故事板時(shí)間線(xiàn)可以使用`Begin()`方法同時(shí)播放子時(shí)間線(xiàn)。
嵌套時(shí)間線(xiàn)動(dòng)畫(huà)的示例
以下示例展示了如何嵌套子時(shí)間線(xiàn)來(lái)創(chuàng)建復(fù)雜的動(dòng)畫(huà)序列:
```xml
<Storyboardxmlns="/winfx/2006/xaml/presentation">
<DoubleAnimationStoryboard.TargetProperty="Opacity"From="1"To="0"Duration="1"/>
<DoubleAnimationStoryboard.TargetProperty="Width"From="100"To="200"Duration="1"BeginTime="0:0:0.5"/>
</Storyboard>
```
此時(shí)間線(xiàn)將對(duì)象的不透明度從1動(dòng)畫(huà)為0,同時(shí)將對(duì)象的寬度從100動(dòng)畫(huà)為200。寬度動(dòng)畫(huà)從不透明度動(dòng)畫(huà)延遲0.5秒開(kāi)始。
最佳實(shí)踐
嵌套時(shí)間線(xiàn)動(dòng)畫(huà)時(shí),請(qǐng)遵循以下最佳實(shí)踐:
*盡量使用子時(shí)間線(xiàn),因?yàn)樗鼈儽裙适掳鍟r(shí)間線(xiàn)更靈活。
*保持時(shí)間線(xiàn)層次結(jié)構(gòu)清晰,避免嵌套過(guò)多層。
*使用`BeginTime`屬性控制動(dòng)畫(huà)的延遲。
*使用緩動(dòng)效果平滑動(dòng)畫(huà)過(guò)渡。
*利用可重用子時(shí)間線(xiàn)提高代碼的可重用性和維護(hù)性。第四部分Storyboard優(yōu)化技巧關(guān)鍵詞關(guān)鍵要點(diǎn)Storyboard分組
1.使用組創(chuàng)建層次結(jié)構(gòu):將相關(guān)動(dòng)畫(huà)分組以創(chuàng)建分層動(dòng)畫(huà),從而擁有更清晰的代碼組織和可維護(hù)性。
2.控制組可見(jiàn)性:通過(guò)控制組的可見(jiàn)性,可以實(shí)現(xiàn)按需加載動(dòng)畫(huà),以?xún)?yōu)化性能并防止不必要的渲染。
3.簡(jiǎn)化時(shí)間線(xiàn):通過(guò)將動(dòng)畫(huà)分組到組中,可以簡(jiǎn)化時(shí)間線(xiàn),減少混亂,并使動(dòng)畫(huà)流程更容易理解。
時(shí)間線(xiàn)優(yōu)化
1.使用鍵幀優(yōu)化:僅設(shè)置與動(dòng)畫(huà)所需的關(guān)鍵變化點(diǎn)相關(guān)的關(guān)鍵幀,以減少動(dòng)畫(huà)大小和渲染開(kāi)銷(xiāo)。
2.優(yōu)化時(shí)間線(xiàn)長(zhǎng)度:縮短時(shí)間線(xiàn)長(zhǎng)度,只包含必要的動(dòng)畫(huà)持續(xù)時(shí)間,以避免不必要的計(jì)算和渲染。
3.使用漸進(jìn)式動(dòng)畫(huà):通過(guò)使用漸進(jìn)式動(dòng)畫(huà),而不是立即更新屬性,可以減少視覺(jué)上的抖動(dòng)并提高動(dòng)畫(huà)流暢度。
動(dòng)畫(huà)屬性?xún)?yōu)化
1.選擇性能良好的屬性:優(yōu)先選擇諸如Opacity、Translation和Rotation等性能良好的屬性進(jìn)行動(dòng)畫(huà)處理,以實(shí)現(xiàn)平滑、高效的動(dòng)畫(huà)。
2.避免非性能屬性:避免使用Height、Width、Margin等非性能屬性進(jìn)行動(dòng)畫(huà)處理,因?yàn)檫@些屬性會(huì)導(dǎo)致布局重新計(jì)算,從而影響性能。
3.使用綁定屬性:通過(guò)將動(dòng)畫(huà)屬性綁定到其他屬性,可以減少動(dòng)畫(huà)計(jì)算,并確保屬性值之間的同步性。
觸發(fā)器優(yōu)化
1.優(yōu)化事件處理:使用高效的事件處理方法,例如弱事件處理,以避免潛在的內(nèi)存泄漏和性能問(wèn)題。
2.考慮事件范圍:只訂閱與觸發(fā)器邏輯相關(guān)的事件,以減少不必要的事件處理開(kāi)銷(xiāo)。
3.使用延遲加載:在開(kāi)始處理觸發(fā)器之前使用延遲加載,以推遲資源密集型操作,提高性能。
性能分析
1.使用XAML編譯器驗(yàn)證:利用XAML編譯器驗(yàn)證器來(lái)檢測(cè)動(dòng)畫(huà)中的潛在性能問(wèn)題。
2.使用性能分析工具:使用性能分析工具,如WPFPerformanceSuite,以識(shí)別和解決影響動(dòng)畫(huà)性能的瓶頸。
3.優(yōu)化動(dòng)畫(huà)效果:通過(guò)調(diào)整動(dòng)畫(huà)效果,如緩動(dòng)函數(shù)和過(guò)渡模式,可以改善動(dòng)畫(huà)流暢度并優(yōu)化性能。
其他優(yōu)化技巧
1.使用動(dòng)畫(huà)緩存:利用動(dòng)畫(huà)緩存來(lái)存儲(chǔ)動(dòng)畫(huà)狀態(tài)并減少重復(fù)計(jì)算,從而提高性能。
2.使用硬件加速:在支持硬件加速的設(shè)備上啟用硬件加速,以卸載動(dòng)畫(huà)渲染到GPU,實(shí)現(xiàn)更快的動(dòng)畫(huà)幀率。
3.管理動(dòng)畫(huà)優(yōu)先級(jí):設(shè)置動(dòng)畫(huà)優(yōu)先級(jí)以確保重要?jiǎng)赢?huà)獲得優(yōu)先權(quán),并防止低優(yōu)先級(jí)動(dòng)畫(huà)影響關(guān)鍵動(dòng)畫(huà)。Storyboard優(yōu)化技巧
減少storyboard的數(shù)量
*合并相關(guān)的動(dòng)畫(huà)到單個(gè)storyboard中。
*使用同一個(gè)storyboard觸發(fā)多個(gè)元素的動(dòng)畫(huà)。
避免使用過(guò)渡動(dòng)畫(huà)
*過(guò)渡動(dòng)畫(huà)會(huì)創(chuàng)建新的storyboard,這可能會(huì)導(dǎo)致性能問(wèn)題。
*替代方案:使用觸發(fā)器或使用代碼顯式設(shè)置動(dòng)畫(huà)屬性。
在VisualStateGroup中使用動(dòng)畫(huà)
*VisualStateGroup提供了一種更有效的方式來(lái)管理多個(gè)視覺(jué)狀態(tài)之間的動(dòng)畫(huà)。
*當(dāng)視覺(jué)狀態(tài)更改時(shí),VisualStateGroup會(huì)自動(dòng)觸發(fā)動(dòng)畫(huà)。
使用ParallelReplaceStoryboards
*ParallelReplaceStoryboards允許在運(yùn)行時(shí)替換storyboard。
*這可以用于優(yōu)化視覺(jué)狀態(tài)之間的過(guò)渡。
使用CompositeTransform
*CompositeTransform允許在單個(gè)變換中組合多個(gè)變換。
*減少了storyboard的數(shù)量并提高了性能。
優(yōu)化動(dòng)畫(huà)時(shí)間線(xiàn)
*設(shè)置適當(dāng)?shù)膭?dòng)畫(huà)持續(xù)時(shí)間,避免使用過(guò)長(zhǎng)的動(dòng)畫(huà)。
*使用貝塞爾曲線(xiàn)或運(yùn)動(dòng)方程優(yōu)化動(dòng)畫(huà)曲線(xiàn)。
使用離散動(dòng)畫(huà)
*離散動(dòng)畫(huà)僅在動(dòng)畫(huà)開(kāi)始和結(jié)束時(shí)更新屬性。
*減少了動(dòng)畫(huà)幀的數(shù)量,提高了性能。
避免使用關(guān)鍵幀動(dòng)畫(huà)
*關(guān)鍵幀動(dòng)畫(huà)在動(dòng)畫(huà)過(guò)程中不斷更新屬性。
*替代方案:使用平滑動(dòng)畫(huà)或離散動(dòng)畫(huà)。
使用非連續(xù)動(dòng)畫(huà)
*非連續(xù)動(dòng)畫(huà)在動(dòng)畫(huà)過(guò)程中只更新必需的屬性。
*減少了動(dòng)畫(huà)幀的數(shù)量,提高了性能。
緩存動(dòng)畫(huà)
*緩存動(dòng)畫(huà)可以防止跨幀重新計(jì)算屬性值。
*使用EnableCaching屬性來(lái)啟用緩存。
使用動(dòng)畫(huà)優(yōu)化工具
*利用VisualStudio中提供的動(dòng)畫(huà)優(yōu)化工具。
*這些工具可以識(shí)別并修復(fù)動(dòng)畫(huà)性能問(wèn)題。
其他優(yōu)化技巧
*避免使用不透明度動(dòng)畫(huà),因?yàn)樗鼤?huì)導(dǎo)致不可預(yù)測(cè)的性能行為。
*盡可能使用硬件加速。
*在動(dòng)畫(huà)過(guò)程中避免使用布局pass。
*減少動(dòng)畫(huà)的元素?cái)?shù)量。
*使用批處理動(dòng)畫(huà)來(lái)減少繪制調(diào)用。
*優(yōu)化動(dòng)畫(huà)中使用的資源(例如圖像或視頻)。
通過(guò)采用這些優(yōu)化技巧,可以顯著提高WPF應(yīng)用程序中storyboard的性能,從而改善用戶(hù)體驗(yàn)和應(yīng)用程序的整體響應(yīng)能力。第五部分雙向動(dòng)畫(huà)和反向動(dòng)畫(huà)關(guān)鍵詞關(guān)鍵要點(diǎn)雙向動(dòng)畫(huà):
1.雙向動(dòng)畫(huà)允許在正向和反向播放動(dòng)畫(huà),提供更自然和靈活的效果。
2.通過(guò)設(shè)置RelativeToDuration屬性來(lái)控制反向動(dòng)畫(huà)的相對(duì)于正向動(dòng)畫(huà)的播放位置。
3.雙向動(dòng)畫(huà)適用于重復(fù)動(dòng)畫(huà),其中動(dòng)畫(huà)應(yīng)該在結(jié)束時(shí)返回其原始狀態(tài)。
反向動(dòng)畫(huà):
雙向動(dòng)畫(huà)
雙向動(dòng)畫(huà)是一種允許動(dòng)畫(huà)在正向和反向之間切換的動(dòng)畫(huà)技術(shù)。這使得創(chuàng)建可逆動(dòng)畫(huà)成為可能,其中對(duì)象可以根據(jù)觸發(fā)事件在兩個(gè)相反的方向之間移動(dòng)。
雙向動(dòng)畫(huà)可以通過(guò)設(shè)置`AutoReverse`屬性為`True`來(lái)實(shí)現(xiàn),如下所示:
```
<ButtonContent="Move"Click="Button_Click">
<Button.Triggers>
<EventTriggerRoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationStoryboard.TargetName="rect"Storyboard.TargetProperty="Width"From="100"To="200"Duration="0:0:1"AutoReverse="True"RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
```
在這種情況下,單擊按鈕將觸發(fā)一個(gè)動(dòng)畫(huà),使矩形在100像素和200像素之間來(lái)回切換寬度。動(dòng)畫(huà)將無(wú)限期地持續(xù)下去,直到再次單擊按鈕或觸發(fā)其他事件將其停止。
使用雙向動(dòng)畫(huà)的好處包括:
*可逆動(dòng)畫(huà):對(duì)象可以在兩個(gè)相反的方向之間移動(dòng),從而創(chuàng)建更動(dòng)態(tài)和交互式的動(dòng)畫(huà)。
*靈活控制:`AutoReverse`屬性允許根據(jù)需要精確控制動(dòng)畫(huà)的反向行為。
*易于實(shí)現(xiàn):設(shè)置`AutoReverse`屬性即可輕松實(shí)現(xiàn)雙向動(dòng)畫(huà),而無(wú)需復(fù)雜代碼或觸發(fā)器。
反向動(dòng)畫(huà)
反向動(dòng)畫(huà)是一種在動(dòng)畫(huà)結(jié)束時(shí)將對(duì)象返回其原始狀態(tài)的動(dòng)畫(huà)技術(shù)。這與正向動(dòng)畫(huà)形成對(duì)比,正向動(dòng)畫(huà)從一個(gè)起點(diǎn)移動(dòng)到一個(gè)終點(diǎn)。
反向動(dòng)畫(huà)可以通過(guò)設(shè)置`Reverse`屬性為`True`來(lái)實(shí)現(xiàn),如下所示:
```
<ButtonContent="Move"Click="Button_Click">
<Button.Triggers>
<EventTriggerRoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationStoryboard.TargetName="rect"Storyboard.TargetProperty="Width"From="100"To="200"Duration="0:0:1"Reverse="True"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
```
在這種情況下,單擊按鈕將觸發(fā)一個(gè)動(dòng)畫(huà),使矩形從100像素?cái)U(kuò)展到200像素,然后在動(dòng)畫(huà)結(jié)束后返回到100像素。
使用反向動(dòng)畫(huà)的好處包括:
*對(duì)象返回原始狀態(tài):對(duì)象在動(dòng)畫(huà)結(jié)束時(shí)始終返回其原始狀態(tài),確保動(dòng)畫(huà)不會(huì)永久改變對(duì)象的狀態(tài)。
*一致性:反向動(dòng)畫(huà)確保動(dòng)畫(huà)在每次觸發(fā)時(shí)都以相同的方式執(zhí)行,從而提供一致的用戶(hù)體驗(yàn)。
*簡(jiǎn)單實(shí)現(xiàn):設(shè)置`Reverse`屬性即可輕松實(shí)現(xiàn)反向動(dòng)畫(huà),而無(wú)需復(fù)雜代碼或觸發(fā)器。
雙向動(dòng)畫(huà)和反向動(dòng)畫(huà)的組合
雙向動(dòng)畫(huà)和反向動(dòng)畫(huà)可以組合使用以創(chuàng)建更復(fù)雜和動(dòng)態(tài)的動(dòng)畫(huà)效果。例如,可以結(jié)合這兩個(gè)技術(shù)來(lái)創(chuàng)建在兩個(gè)方向之間搖擺的動(dòng)畫(huà):
```
<ButtonContent="Move"Click="Button_Click">
<Button.Triggers>
<EventTriggerRoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationStoryboard.TargetName="rect"Storyboard.TargetProperty="Width"From="100"To="200"Duration="0:0:1"AutoReverse="True"RepeatBehavior="Forever"Reverse="True"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
```
在這種情況下,單擊按鈕將觸發(fā)一個(gè)動(dòng)畫(huà),使矩形在100像素和200像素之間左右搖擺。動(dòng)畫(huà)將無(wú)限期地持續(xù)下去,直到再次單擊按鈕或觸發(fā)其他事件將其停止。
通過(guò)組合雙向動(dòng)畫(huà)和反向動(dòng)畫(huà),可以創(chuàng)建各種創(chuàng)新和引人注目的動(dòng)畫(huà)效果,從而增強(qiáng)用戶(hù)體驗(yàn)并為應(yīng)用程序增添視覺(jué)趣味。第六部分自定動(dòng)畫(huà)行為關(guān)鍵詞關(guān)鍵要點(diǎn)主題名稱(chēng):動(dòng)畫(huà)時(shí)間線(xiàn)
*動(dòng)畫(huà)時(shí)間線(xiàn):用于控制動(dòng)畫(huà)的起點(diǎn)、終點(diǎn)和持續(xù)時(shí)間,可通過(guò)Timeline對(duì)象控制。
*動(dòng)畫(huà)時(shí)鐘:時(shí)間線(xiàn)中的時(shí)鐘,決定動(dòng)畫(huà)的播放速度和方向,可通過(guò)設(shè)置Clock對(duì)象控制。
*關(guān)鍵幀:動(dòng)畫(huà)時(shí)間線(xiàn)上的標(biāo)記點(diǎn),用于指定動(dòng)畫(huà)在特定時(shí)間點(diǎn)處的狀態(tài),可通過(guò)KeyFrame對(duì)象控制。
主題名稱(chēng):轉(zhuǎn)換動(dòng)畫(huà)
自定義動(dòng)畫(huà)行為
自定義動(dòng)畫(huà)行為,也稱(chēng)為動(dòng)畫(huà)行為,允許開(kāi)發(fā)者創(chuàng)建自定義的動(dòng)畫(huà)效果,這些效果可以應(yīng)用于任意目標(biāo)對(duì)象。動(dòng)畫(huà)行為提供了一種靈活且可重用的方法,來(lái)創(chuàng)建復(fù)雜的動(dòng)畫(huà)序列。
#定義自定義動(dòng)畫(huà)行為
自定義動(dòng)畫(huà)行為是一個(gè)派生自`System.Windows.Interactivity.TriggerAction`的類(lèi)。`TriggerAction`類(lèi)定義了當(dāng)觸發(fā)條件滿(mǎn)足時(shí)執(zhí)行的動(dòng)畫(huà)行為。
一個(gè)簡(jiǎn)單的自定義動(dòng)畫(huà)行為的示例如下:
```csharp
publicclassFadeInAnimationBehavior:TriggerAction<FrameworkElement>
protectedoverridevoidInvoke(FrameworkElementtarget,objectparameter)
DoubleAnimationanimation=newDoubleAnimation
From=0,
To=1,
Duration=newDuration(TimeSpan.FromSeconds(1))
};
Storyboard.SetTarget(animation,target);
Storyboard.SetTargetProperty(animation,newPropertyPath(OpacityProperty));
Storyboardstoryboard=newStoryboard();
storyboard.Children.Add(animation);
storyboard.Begin();
}
}
```
這個(gè)動(dòng)畫(huà)行為當(dāng)應(yīng)用于一個(gè)`FrameworkElement`時(shí),會(huì)觸發(fā)一個(gè)淡入動(dòng)畫(huà),從不透明度0逐漸增加到1。
#使用自定義動(dòng)畫(huà)行為
要使用自定義動(dòng)畫(huà)行為,需要遵循以下步驟:
1.定義觸發(fā)器條件:為動(dòng)畫(huà)行為定義一個(gè)觸發(fā)器條件,例如,當(dāng)用戶(hù)單擊目標(biāo)元素時(shí)。
2.將動(dòng)畫(huà)行為附加到目標(biāo)對(duì)象:將自定義動(dòng)畫(huà)行為附加到要?jiǎng)赢?huà)化的目標(biāo)對(duì)象上。
3.應(yīng)用觸發(fā)器條件:滿(mǎn)足觸發(fā)器條件時(shí),會(huì)觸發(fā)動(dòng)畫(huà)行為并執(zhí)行動(dòng)畫(huà)。
#自定動(dòng)畫(huà)行為的優(yōu)點(diǎn)
使用自定義動(dòng)畫(huà)行為有幾個(gè)優(yōu)點(diǎn):
*可重用性:動(dòng)畫(huà)行為可以很容易地重用于不同的目標(biāo)對(duì)象和觸發(fā)器。
*可定制性:開(kāi)發(fā)者可以創(chuàng)建自定義的動(dòng)畫(huà)效果,以滿(mǎn)足特定的需求。
*解耦:動(dòng)畫(huà)行為將動(dòng)畫(huà)邏輯與UI分離,提高了代碼的可維護(hù)性和可讀性。
#性能注意事項(xiàng)
使用自定義動(dòng)畫(huà)行為時(shí),需要考慮以下性能注意事項(xiàng):
*優(yōu)化動(dòng)畫(huà)持續(xù)時(shí)間:避免使用過(guò)長(zhǎng)的動(dòng)畫(huà)持續(xù)時(shí)間,因?yàn)檫@會(huì)消耗CPU資源。
*使用關(guān)鍵幀動(dòng)畫(huà):對(duì)于復(fù)雜的動(dòng)畫(huà),使用關(guān)鍵幀動(dòng)畫(huà)可以提高性能。
*惰性加載動(dòng)畫(huà):只有在需要時(shí)才開(kāi)始動(dòng)畫(huà),以避免不必要的性能開(kāi)銷(xiāo)。
#結(jié)論
自定義動(dòng)畫(huà)行為提供了創(chuàng)建自定義和重用動(dòng)畫(huà)效果的強(qiáng)大方法。通過(guò)遵循最佳實(shí)踐并考慮性能注意事項(xiàng),開(kāi)發(fā)者可以利用動(dòng)畫(huà)行為來(lái)創(chuàng)建引人入勝且高效的動(dòng)畫(huà)序列。第七部分局部動(dòng)畫(huà)和動(dòng)畫(huà)遮罩關(guān)鍵詞關(guān)鍵要點(diǎn)局部動(dòng)畫(huà):
1.局部動(dòng)畫(huà)允許只針對(duì)特定對(duì)象的一部分或?qū)傩赃M(jìn)行動(dòng)畫(huà),而無(wú)需移動(dòng)或變換整個(gè)對(duì)象。
2.它可以創(chuàng)建更精細(xì)、更自然的外觀(guān),并允許更復(fù)雜的效果。
3.通過(guò)使用Storyboard.TargetName和Storyboard.TargetProperty屬性,可以輕松實(shí)現(xiàn)局部動(dòng)畫(huà)。
動(dòng)畫(huà)遮罩:
局部動(dòng)畫(huà)
局部動(dòng)畫(huà)允許對(duì)一個(gè)元素的特定部分或?qū)傩赃M(jìn)行動(dòng)畫(huà)處理,而不會(huì)影響元素的其他部分。
*ClipPathGeometry動(dòng)畫(huà):此動(dòng)畫(huà)用于更改ClipPathGeometry對(duì)象的Geometry屬性,從而揭示或隱藏元素的不同部分。
*OpacityMask動(dòng)畫(huà):此動(dòng)畫(huà)用于更改OpacityMask的Brush屬性,從而控制元素的不同部分的透明度。
*Geometry動(dòng)畫(huà):此動(dòng)畫(huà)用于更改一個(gè)元素的Geometry屬性,從而改變其形狀或尺寸。
*Transform動(dòng)畫(huà):此動(dòng)畫(huà)用于更改一個(gè)元素的Transform屬性,從而改變其位置、旋轉(zhuǎn)、縮放或傾斜。
動(dòng)畫(huà)遮罩
動(dòng)畫(huà)遮罩是一種用于定義要對(duì)其進(jìn)行動(dòng)畫(huà)處理的元素區(qū)域的特殊類(lèi)型的不透明度遮罩。
*遮罩與動(dòng)畫(huà)效果:動(dòng)畫(huà)遮罩可以與各種動(dòng)畫(huà)效果結(jié)合使用,例如淡入淡出、滑動(dòng)或旋轉(zhuǎn)。通過(guò)組合遮罩和動(dòng)畫(huà),可以創(chuàng)建復(fù)雜的動(dòng)畫(huà)序列,其中元素的特定部分以受控的方式移動(dòng)或更改。
局部動(dòng)畫(huà)和動(dòng)畫(huà)遮罩的應(yīng)用場(chǎng)景
*揭示或隱藏內(nèi)容:局部動(dòng)畫(huà)可用于在用戶(hù)交互或其他事件觸發(fā)時(shí)動(dòng)態(tài)顯示或隱藏元素的特定部分。
*強(qiáng)調(diào)特定元素:動(dòng)畫(huà)遮罩可用于重點(diǎn)突出元素的一個(gè)區(qū)域,并指導(dǎo)用戶(hù)關(guān)注該區(qū)域。
*創(chuàng)建交互式控件:局部動(dòng)畫(huà)和動(dòng)畫(huà)遮罩可用于創(chuàng)建響應(yīng)用戶(hù)輸入的交互式控件,例如滑塊或調(diào)色板。
*動(dòng)畫(huà)序列:局部動(dòng)畫(huà)和動(dòng)畫(huà)遮罩可用于創(chuàng)建動(dòng)畫(huà)序列,其中元素的特定部分以協(xié)調(diào)的方式移動(dòng)或更改。
在WPF中實(shí)現(xiàn)局部動(dòng)畫(huà)和動(dòng)畫(huà)遮罩
局部動(dòng)畫(huà)和動(dòng)畫(huà)遮罩可以通過(guò)XAML中的Storyboard和動(dòng)畫(huà)類(lèi)實(shí)現(xiàn)。
實(shí)現(xiàn)局部動(dòng)畫(huà):
```xaml
<Storyboard>
<ClipPathGeometryAnimationStoryboard.TargetProperty="Clip"Duration="0:0:1"
From="M0,0L100,0L100,100L0,100Z"
To="M50,0L100,0L100,100L50,100Z"/>
</Storyboard>
```
實(shí)現(xiàn)動(dòng)畫(huà)遮罩:
```xaml
<Storyboard>
<OpacityMaskAnimationStoryboard.TargetProperty="OpacityMask"Duration="0:0:1"
From="Transparent"To="Black"/>
</Storyboard>
```
示例使用:
```xaml
<Rectanglex:Name="rect"Width="100"Height="100"Fill="Blue">
<Rectangle.Clip>
<RectangleGeometryRect="M0,0L100,0L100,100L0,100Z"/>
</Rectangle.Clip>
</Rectangle>
<ButtonClick="Button_Click">
<Button.Triggers>
<EventTriggerRoutedEvent="Click">
</EventTrigger>
</Button.Triggers>
</Button>
```
當(dāng)按下按鈕時(shí),上述代碼將觸發(fā)一個(gè)Storyboard,該Storyboard使用一個(gè)ClipPathGeometryAnimation將矩形的裁剪區(qū)域從一個(gè)大矩形動(dòng)畫(huà)到一個(gè)小矩形。
性能注意事項(xiàng):
*使用局部動(dòng)畫(huà)和動(dòng)畫(huà)遮罩會(huì)增加應(yīng)用程序的計(jì)算開(kāi)銷(xiāo)。
*應(yīng)謹(jǐn)慎使用局部動(dòng)畫(huà),因?yàn)檫^(guò)多的局部動(dòng)畫(huà)可能會(huì)導(dǎo)致性能問(wèn)題。
*通過(guò)使用適當(dāng)?shù)男阅軆?yōu)化技術(shù),例如CompositionTarget.Rendering事件處理程序和優(yōu)化布局更新,可以最大限度地減少局部動(dòng)畫(huà)和動(dòng)畫(huà)遮罩的影響。第八部分性能優(yōu)化和動(dòng)畫(huà)調(diào)試高級(jí)WPF動(dòng)畫(huà)技術(shù)探索:性能優(yōu)化和動(dòng)畫(huà)調(diào)試
優(yōu)化性能
*幀率優(yōu)化:動(dòng)畫(huà)的性能取決于幀率。通過(guò)避免使用繁重的視覺(jué)效果、使用較小的圖像和使用hardwareacceleration來(lái)優(yōu)化幀率。
*線(xiàn)程管理:動(dòng)畫(huà)過(guò)程應(yīng)卸載到后臺(tái)線(xiàn)程,以避免影響UI線(xiàn)程。使用`Dispatcher`類(lèi)來(lái)調(diào)度動(dòng)畫(huà)任務(wù)。
*內(nèi)存管理:動(dòng)畫(huà)對(duì)象在內(nèi)存中會(huì)占用空間。使用對(duì)象池、緩存和異步加載來(lái)管理內(nèi)存。
*避免過(guò)度使用動(dòng)畫(huà):僅在必要時(shí)使用動(dòng)畫(huà)。過(guò)度的動(dòng)畫(huà)會(huì)降低性能。
*使用簡(jiǎn)化路徑:使用簡(jiǎn)化路徑可以減少動(dòng)畫(huà)計(jì)算的復(fù)雜性,從而提高性能。
*使用列外元素:列外元素不會(huì)受到動(dòng)畫(huà)的影響,可以提高性能。
動(dòng)畫(huà)調(diào)試
*使用VisualStudio調(diào)試器:VisualStudio提供了調(diào)試動(dòng)畫(huà)的工具,包括設(shè)置斷點(diǎn)和檢查動(dòng)畫(huà)屬性。
*使用Snoop:Snoop是一個(gè)WPF可視化工具,可以檢查動(dòng)畫(huà)的屬性和樹(shù)結(jié)構(gòu)。
*使用PerfView:PerfView是一個(gè)Microsoft工具,可以分析和優(yōu)化WPF應(yīng)用程序的性能。
*使用XAMLProfiler:XAMLProfiler是一個(gè)商業(yè)工具,可以分析XAML應(yīng)用程序的性能和可調(diào)試性。
*使用FrameRateCounter:FrameRateCounter是一個(gè)小型工具,可以顯示當(dāng)前的幀率。
動(dòng)畫(huà)特定的性能技巧
*使用故
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度教育培訓(xùn)機(jī)構(gòu)學(xué)生資助及獎(jiǎng)學(xué)金管理合同
- 案例分析及教育寫(xiě)作(學(xué)生打印版)
- 二零二五年度個(gè)人消費(fèi)分期付款服務(wù)合同
- 二零二五年度排水泵站設(shè)備升級(jí)合同4篇
- 二零二五年度拍賣(mài)會(huì)安全保障合同范本
- 2025年度房產(chǎn)租賃合同糾紛調(diào)解服務(wù)協(xié)議4篇
- 2025年度摩托車(chē)行業(yè)展會(huì)主辦與參展合同
- 第四單元 和諧與夢(mèng)想 (解析版)-2023-2024學(xué)年九年級(jí)道德與法治上學(xué)期期中考點(diǎn)大串講(部編版)
- 第二單元 近代化的早期探索與民族危機(jī)的加劇(原卷版)- 2023-2024學(xué)年八年級(jí)歷史上學(xué)期期中考點(diǎn)大串講(部編版)
- 課題申報(bào)參考:民事訴訟法與民事實(shí)體法協(xié)同發(fā)展研究
- 《社區(qū)康復(fù)》課件-第五章 脊髓損傷患者的社區(qū)康復(fù)實(shí)踐
- 繪本《圖書(shū)館獅子》原文
- 安全使用公共WiFi網(wǎng)絡(luò)的方法
- 2023年管理學(xué)原理考試題庫(kù)附答案
- 【可行性報(bào)告】2023年電動(dòng)自行車(chē)相關(guān)項(xiàng)目可行性研究報(bào)告
- 歐洲食品與飲料行業(yè)數(shù)據(jù)與趨勢(shì)
- 放療科室規(guī)章制度(二篇)
- 中高職貫通培養(yǎng)三二分段(中職階段)新能源汽車(chē)檢測(cè)與維修專(zhuān)業(yè)課程體系
- 浙江省安全員C證考試題庫(kù)及答案(推薦)
- 目視講義.的知識(shí)
- 房地產(chǎn)公司流動(dòng)資產(chǎn)管理制度
評(píng)論
0/150
提交評(píng)論