2011-04-08 23 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不可用)。我只操纵过直接在控件的