WPF界面控件DevExpress WPF開發入門教程 - SVG圖像

本文主要介紹如何顯示SVG圖像和更改其調色板,您可以使用SVG Icon Builder或任何第三方矢量圖形編輯器來創建SVG圖像。

DevExpress WPF v21.1高速下載

DevExpress技術交流羣4:715863792      歡迎一起進羣討論

在XAML中顯示SVG圖像

DevExpress組件包括接受圖像URI的ImageSource類型的屬性,將組件的屬性設置爲目標SVG圖像URI來將SVG圖像分配給DevExpress組件:

XAML

<Window ...
xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars">
<StackPanel>
<dxb:ToolBarControl>
<dxb:BarButtonItem Glyph="Images/Open2.svg"/>
<dxb:BarButtonItem Glyph="Images/Up.svg"/>
<dxb:BarButtonItem Glyph="Images/Open.svg"/>
</dxb:ToolBarControl>
</StackPanel>
</Window>
DevExpress WPF SVG圖像

SvgImageSource標記擴展

將標記擴展與支持ImageSource值的任何屬性一起使用,SvgImageSource允許您指定以下 SVG 圖像屬性:

DevExpress WPF SVG圖像

以下代碼示例使用SvgImageSourceExtension將SVG圖像顯示爲SimpleButton的字形,並指定字形的 Size  UsePalette 屬性:

XAML

<Window ...
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
dx:ThemeManager.ThemeName="Office2019HighContrast">
<StackPanel>
<dx:SimpleButton Glyph="{dx:SvgImageSource Uri='Images/Open2.svg', Size='20,20'}"/>
<dx:SimpleButton Glyph="{dx:SvgImageSource Uri='Images/Up.svg', Size='60,60', UsePalette='false'}"/>
<dx:SimpleButton Glyph="{dx:SvgImageSource Uri='Images/Open.svg'}"/>
</StackPanel>
</Window>
DevExpress WPF SVG圖像

DXImage標記擴展

使用DXImage標記擴展從DevExpress.Images程序集中加載圖像。

注意:使用Image Picker工具訪問存儲在DevExpress.Images.v21.1.dll程序集中的SVG圖像集合。

XAML

<Window ...
xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars">
<StackPanel>
<dxb:ToolBarControl>
<dxb:BarButtonItem Glyph="{dx:DXImage 'SvgImages/Actions/Open2.svg'}"/>
<dxb:BarButtonItem Glyph="{dx:DXImage 'SvgImages/Actions/Up.svg'}"/>
<dxb:BarButtonItem Glyph="{dx:DXImage 'SvgImages/Actions/Open.svg'}"/>
</dxb:ToolBarControl>
</StackPanel>
</Window>

在運行時顯示SVG圖像

1. 指定SVG圖像的絕對路徑並將其分配給URI 值。

2. 將URI傳遞給 WpfSvgRenderer.CreateImageSource 方法,將該方法分配給支持ImageSource值的控件屬性:

C#

Uri uri = new System.Uri("C:/Work/SVGImages/SVGImages/Open.svg");
baritem_open.Glyph = WpfSvgRenderer.CreateImageSource(uri);

VB.NET

Dim uri As Uri = New System.Uri("C:/Work/SVGImages/SVGImages/Open.svg")
baritem_open.Glyph = WpfSvgRenderer.CreateImageSource(uri)

SVG圖像調色板

DevExpress Theme可以使 SVG 圖像的顏色適應應用程序主題,如果 SVG 圖像元素使用以下預定義的顏色樣式,應用程序主題會調整 SVG 圖像顏色來匹配主題:

  • 紅色
  • 綠色
  • 藍色
  • 黃色
  • 黑色
  • 白色

以下 SVG 圖像使用綠色和白色顏色樣式。

DevExpress WPF SVG圖像

XML

<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<g id="Add">
<circle class="Green" cx="16" cy="16" r="14"/>
<polygon class="White" points="24,14 18,14 18,8 14,8 14,14 8,14 8,18 14,18 14,24 18,24 18,18 24,18"/>
</g>
</svg>

應用程序主題可以更改 SVG 圖像的顏色:

DevExpress WPF SVG圖像

更改調色板顏色

以下代碼示例展示瞭如何使用WpfSvgPalette將主題的SVG調色板替換爲自定義顏色。

SVGImage

<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" id="Open2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.Green{fill:#039C23;}
.Yellow{fill:#FFB115;}
.st0{opacity:0.75;}
.CustomBlue{fill:#2A9DF4;}
</style>
<g class="st0">
<path class="Yellow" d="M19.2,10H12V7c0-0.6-0.4-1-1-1H3C2.4,6,2,6.5,2,7v18c0,0.2,0,0.3,0.1,0.4c0,0,0.1-0.1,0.1-0.2l5.5-10
C8,14.5,8.7,14,9.5,14h13.7L19.2,10z"/>
</g>
<path class="CustomBlue" d="M29.3,16H9.6L4,26h19.8c0.5,0,1.1-0.2,1.3-0.6l4.9-8.9C30.1,16.2,29.8,16,29.3,16z"/>
<path class="Green" d="M28,8c0-3.3-2.7-6-6-6s-6,2.7-6,6c0-2.2,1.8-4,4-4s4,1.8,4,4h-4l6,6l6-6H28z"/>
</svg>

XAML

<Window ...
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core">
<Image Source="{dx:SvgImageSource Uri=Images/Open.svg}">
<dx:WpfSvgPalette.Palette>
<dx:WpfSvgPalette>
<SolidColorBrush x:Key="Green" Color="LawnGreen"/>
<SolidColorBrush x:Key="CustomBlue" Color="LightBlue"/>
</dx:WpfSvgPalette>
</dx:WpfSvgPalette.Palette>
</Image>
</Window>
DevExpress WPF SVG圖像

覆蓋主題顏色

要忽略主題的SVG調色板,請將WpfSvgPalette.OverridesThemeColors屬性設置爲true。 在這種情況下,SVG圖像在所有主題中都保持其原始顏色,除非您覆蓋特定WpfSvgPalette中的顏色:

XAML

<Window ...
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core">
<Image Source="{dx:SvgImageSource Uri=Images/Open.svg}">
<dx:WpfSvgPalette.Palette>
<dx:WpfSvgPalette OverridesThemeColors="True">
<SolidColorBrush x:Key="Green" Color="LawnGreen"/>
</dx:WpfSvgPalette>
</dx:WpfSvgPalette.Palette>
</Image>
</Window>
DevExpress WPF SVG圖像

忽略SVG圖像的調色板

當您使用SvgImageSource標記擴展時,可以將BaseSvgImageSourceExtension.UsePalette 屬性設置爲false來忽略主題的SVG調色板並顯示SVG圖像的原始顏色。

以下代碼示例顯示兩個SVG圖像,第一個圖像的顏色來自應用程序主題(“Office2019Black”);第二個圖像的UsePalette屬性設置爲false以忽略此主題的 SVG 調色板:

XAML

<dx:ThemedWindow ...
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
dx:ThemeManager.ThemeName="Office2019Black">
<StackPanel>
<dx:DXImage Source="{dx:SvgImageSource Uri='pack://application:,,,/DevExpress.Images.v20.1;component/SvgImages/Outlook Inspired/CustomerProfileReport.svg'}"/>
<dx:DXImage Source="{dx:SvgImageSource Uri='pack://application:,,,/DevExpress.Images.v20.1;component/SvgImages/Outlook Inspired/CustomerProfileReport.svg', UsePalette = false}"/>
</StackPanel>
</dx:ThemedWindow>

 

DevExpress WPF SVG圖像

更改特定狀態下的SVG圖像顏色

WpfSvgPalette允許您爲特定狀態創建某些調色板,可以將SvgImageHelper.State綁定到任何屬性來創建基於此屬性的狀態。

以下代碼示例使用SvgImageHelper.State附加屬性在鼠標指針懸停在圖像上時更改 SVG 圖像的顏色(綠色):

XAML

<Window ...
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core">
<dx:SimpleButton Glyph="{dx:SvgImageSource Uri=Images/Open.svg}"
dx:SvgImageHelper.State="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}">
<dx:WpfSvgPalette.Palette>
<dx:WpfSvgPalette>
<dx:WpfSvgPalette.States>
<dx:WpfSvgPalette x:Key="True">
<SolidColorBrush x:Key="Green" Color="Coral"/>
</dx:WpfSvgPalette>
</dx:WpfSvgPalette.States>
</dx:WpfSvgPalette>
</dx:WpfSvgPalette.Palette>
</dx:SimpleButton>
</Window>
DevExpress WPF SVG圖像

支持的 SVG 元素

WPF SVG渲染引擎支持以下SVG元素:

限制

DevExpress 控件僅支持基本的 SVG 元素和功能,不支持的元素列表包括(但不限於)以下項目:

  • 動畫和鼠標事件
  • 外部 .CSS 樣式
  • Masks
  • 除畫筆外的所有元素的相對值(百分比)
  • 自定義字體
  • 文本路徑
  • 使用 enable-background 參數進行復雜的不透明度設置
  • “pattern”元素

DevExpress WPF | 下載試用

DevExpress WPF擁有120+個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有着強大互動功能的XAML基礎應用程序,這些應用程序專注於當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產品,還是以數據爲中心的商業智能產品,都能通過DevExpress WPF控件來實現。

更多DevExpress線上公開課、中文教程資訊請上中文網獲取

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章