2011-04-08 50 views
1

在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」定義一個完全獨立的資源。

我想總體上有一個更簡單的工作流程,但至少我想解決着色問題。

謝謝。

回答

0

你需要看看StateGroups:

http://www.interact-sw.co.uk/iangblog/2008/06/10/visual-state

這其實很容易使你的控制微小的偏差就了事你想讓你的方式。

有在這個博客上,通過使用Expression Blend中做到這一點走一個漂亮的小視頻:

http://blogs.msdn.com/b/expression/archive/2009/10/02/visual-state-manager-tips-for-design-and-authoring.aspx

+0

我樞密院StateGroups和VSM,但會,幫助我在這種特殊情況下?即使我給路徑一個名稱,我可以將它定位到它的Fill屬性?它位於中的內(顯然,TemplateBinding不可用)。我只操縱過直接在控件的