在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