在Silverlight中這樣做似乎比它應該更難,我也沒有100%的解決方案。我有一些由我的設計師創建的矢量圖標。我將它們導入到Expression Design中。全部以一張圖標的形式出現,在其中選擇一個圖標和零件,執行零件操作>團結,右鍵單擊>導出,然後選擇「XAML Silverlight 4/WPF Canvas」。它創建的文件看起來像:作爲按鈕圖標的矢量圖形
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="Document" Width="36.0254" Height="38.3402" Clip="F1 M 0,0L 36.0254,0L 36.0254,38.3402L 0,38.3402L 0,0">
<Canvas x:Name="Layer_1" Width="799.564" Height="600.326" Canvas.Left="0" Canvas.Top="0">
<Path x:Name="Path" Width="36.1326" Height="38.3401" Canvas.Left="-0.000118291" Canvas.Top="2.00272e-005" Stretch="Fill" Fill="#FF000000" Data="F1 M 28.1747,10.0387C 28.1747,15.5867 23.6801,20.0827 18.1321,20.0827C 12.5881,20.0827 8.09204,15.5867 8.09204,10.0387C 8.09204,4.49471 12.5881,2.00272e-005 18.1321,2.00272e-005C 23.6801,2.00272e-005 28.1747,4.49471 28.1747,10.0387 Z M 10.0131,19.6989C 10.0131,19.6989 17.9891,27.2895 25.9651,19.6989C 25.9651,19.6989 37.6877,26.0415 35.9584,38.3402L 0.115723,38.3402C 0.115723,38.3402 -1.80688,26.6162 10.0131,19.6989 Z "/>
</Canvas>
我再拔出人的路幾何形狀和扔東西到ContentControl中的風格並將它放入資源字典。它看起來如此:
<Style x:Key="UserIcon" TargetType="ContentControl">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Path Stretch="Uniform" Fill="White" Data="F1 M 28.1747,10.0387C 28.1747,15.5867 23.6801,20.0827 18.1321,20.0827C 12.5881,20.0827 8.09204,15.5867 8.09204,10.0387C 8.09204,4.49471 12.5881,2.00272e-005 18.1321,2.00272e-005C 23.6801,2.00272e-005 28.1747,4.49471 28.1747,10.0387 Z M 10.0131,19.6989C 10.0131,19.6989 17.9891,27.2895 25.9651,19.6989C 25.9651,19.6989 37.6877,26.0415 35.9584,38.3402L 0.115723,38.3402C 0.115723,38.3402 -1.80688,26.6162 10.0131,19.6989 Z " />
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
最後,該按鈕看起來像:
<Button>
<ContentControl Style="{StaticResource UserIcon" />
</Button>
這工作不錯,但一)它是一個麻煩,和b)它是在一個關鍵的限定。我希望能夠改變懸停和活動等顏色。問題是模板綁定不起作用。即我不能這樣做:
<Path Stretch="Uniform" Fill="{TemplateBinding Foreground}" ...
的「TemplateBinding」的選擇不僅不會在VS.Net編輯器出現,但它僅僅適用於沒有色彩可言,如果我只是嘗試一下(無視VS.Net的建議,即它不起作用)。因此,現在我必須爲x:Name =「HoveredUserIcon」定義一個完全獨立的資源。
我想總體上有一個更簡單的工作流程,但至少我想解決着色問題。
謝謝。
我樞密院StateGroups和VSM,但會,幫助我在這種特殊情況下?即使我給路徑一個名稱,我可以將它定位到它的Fill屬性?它位於中的內(顯然,TemplateBinding不可用)。我只操縱過直接在控件的元素內的元素;在哪裏,是的,我已經成功地使用了VSM。 –
xanadont
2011-04-08 16:49:06
你知道嗎?我得到了在互聯網上的其他地方使用矢量按鈕圖標的解決方案。原來你可以直接在模板中放置路徑,並且TemplateBinding的工作狀態很好。無論如何,感謝您的幫助。 – xanadont 2011-04-08 16:59:17