常用Path路徑
- 正三角形(左):<Path Data="M40,0 L0,30 40,60 z" Stretch="Uniform"/>
- 正三角形(上):<Path Data="M0,40 L30,0 60,40 z" Stretch="Uniform"/>
- 正三角形(右):<Path Data="M0,0 L40,30 0,60 z" Stretch="Uniform"/>
- 正三角形(下):<Path Data="M0,0 L30,40 60,0 z" Stretch="Uniform"/>
- 矩形:<Path Data="M0,0 L1,0 L1,1 L0,1 z" Stretch="Uniform"/>
- 圓形:<Path Data="M100,50 C100,77.614237 77.614237,100 50,100 C22.385763,100 0,77.614237 0,50 C0,22.385763 22.385763,0 50,0 C77.614237,0 100,22.385763 100,50 z" Stretch="Uniform"/>
- 箭頭(左):<Path Data="M40,0 L0,30 40,60" Stretch="Uniform"/>
- 箭頭(上):<Path Data="M0,40 L30,0 60,40" Stretch="Uniform"/>
- 箭頭(右):<Path Data="M0,0 L40,30 0,60" Stretch="Uniform"/>
- 箭頭(下):<Path Data="M0,0 L30,40 60,0" Stretch="Uniform"/>
- 半圓(左):<Path Data="M34,0 L34,68 C15.222317,68 0,52.777684 0,34 0,15.222319 15.222317,3.5762787E-07 34,0 z" Stretch="Uniform"/>
- 半圓(上):<Path Data="M34,0 C52.777684,7.1525574E-07 68,15.222319 68,34.000001 L0,34.000001 C3.5762787E-07,15.222319 15.222319,7.1525574E-07 34,0 z" Stretch="Uniform"/>
- 半圓(右):<Path Data="M0,0 C18.777683,3.5762787E-07 34,15.222319 34,34 34,52.777684 18.777683,68 0,68 z" Stretch="Uniform"/>
- 半圓(下):<Path Data="M0,0 L68,0 C68,18.777681 52.777684,34 34,34 15.222319,34 3.5762787E-07,18.777681 0,0 z" Stretch="Uniform"/>
- 橢圓矩形(水平):<Path Data="M34,0 L76,0 C94.777683,9.8347664E-07 110,15.222319 110,34.000001 110,52.777684 94.777683,68.000001 76,68.000001 L34,68.000001 C15.222317,68.000001 0,52.777684 0,34.000001 0,15.222319 15.222317,9.8347664E-07 34,0 z" Stretch="Uniform"/>
- 橢圓矩形(垂直):<Path Data="M34.000001,0 C52.777684,0 68.000001,15.222321 68.000001,34 L68.000001,76 C68.000001,94.777681 52.777684,110 34.000001,110 15.222319,110 8.9406967E-07,94.777681 0,76 L0,34 C8.9406967E-07,15.222321 15.222319,0 34.000001,0 z" Stretch="Uniform"/>
- 菱形:<Path Data="M150,0 L0,75 0,225 150,300 300,225 300,75 z" Stretch="Uniform"/>
Stretch默認使用Uniform,在這種參數下矩形為正方形、圓形為正圓形,如果修改Stretch為Fill,則根據容器高寬進行自由拉伸。
動畫
- 緩動函數(使用IE查看):http://tinyurl.com/animationeasing
- WPF動畫默認為60幀/s,程序會在系統資源允許的情況下努力使動畫達到這個幀率,也可以在代碼里手動指定幀率,修該附加屬性
Timeline.DesiredFrameRate的值。
變化
LayoutTransform:對元素使用該變換時會真正改變元素的大小和位置,從而引發布局容器的重新計算,因此,只當使用該變化一次,不要在動畫中使用。RenderTransform:顯示變化,對元素運用該變化時並不會真正的改變元素的大小和位置,只是顯示上面產生了變化,因此不會影響布局容器的測量和排版。RenderTransformOrigin:使用變化時可以在具體變化中使用決對坐標,也可以直接指定元素的RenderTransformOrigin,從而使用相對坐標,比如"0.5,0.5"就是該元素的中心點。
字體
- WPF有個問題是小文本顯示不太清晰,原因是WPF沒有使用GDI渲染文本,好的解決方法是增大文本,在通常的
96dpi的顯示器上,文本字號最小控制在15,如果小於這個值最好將文本的TextOptions.TextFormattingMode的值設置為Display,而不是標准的Ideal,這樣做會使文本更清晰。 - 檢查字體版權是否允許在自己的程序中嵌入,可使用工具:https://www.microsoft.com/en-us/Typography/TrueTypeProperty21.aspx,如果右鍵屬性顯示可安裝就可以使用。
- 字體加載的兩種方式,第一種字體為嵌入式資源:
FontFamily="pack://application:,,,/WpfLabs;component/FontFamilyDemo/#Aileron";第二種字體為文件,可在后台代碼中設置:new FontFamily(@"D:\FontFamilyDemo\FontFiles\#Aileron");。
性能
- WPF中,很多元素繼承了
Freezable,表示該元素支持凍結,凍結之后變更通知就失效了,但是內存占用會下降,很多情況下都可以將元素凍結,常見的比如SolidColorBrush和Storyboard。在Xaml中使用時先引用命名空間xmlns:options="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options",然后對元素使用<Storyboard options:Freeze="True">。 - 集合虛擬化:啟用UI虛擬化的兩個附加屬性 1、
ScrollViewer.CanContentScroll="True";2、VirtualizingStackPanel.IsVirtualizing="True"。 - 大集合項容器再循環,項容器再循環提高了滾動性能,降低了內存消耗量:
VirtualizingStackPanel.VirtualizationMode="Recycling" - 當集合中使用了分組,默認不會啟用虛擬化,需要手動設置
VirtualizingStackPanel.IsVirtualizingWhenGrouping屬性糾正這個問題
<ListBox VirtualizingStackPanel.IsVirtualizingWhenGrouping="True"...>
綁定
Xaml中String.Format的使用參考:https://www.cnblogs.com/candyzkn/p/4476832.html
Uri綁定資源路徑寫法:pack://application:,,,/WpfLabs;component/FontFamilyDemo/#Aileron
Uri綁定本地文件路徑寫法:pack://siteoforigin:,,,/Aileron.jpg
錯誤驗證
顯示錯誤提示可使用專用的錯誤模板,即再真正的元素之上附加一層裝飾層來展示真正的錯誤,注意在錯誤模板中使用AdornedElementPlaceholder來標識真正的控件元素,然后使用路徑屬性綁定去尋找真正的錯誤提示,參考19.4.5。
文章中提到的參考來源默認為《WPF編程寶典:使用C# 2012和.NET 4.5 第4版》
