数据绑定按钮内容到静态资源失败

问题描述:

我想在Silverlight 4用户控件的资源中设计一组图标,然后在按钮上显示这些图标。数据绑定按钮内容到静态资源失败

<UserControl.Resources>   
    <Rectangle x:Key="Icon1" Fill="Black" Width="10" Height="10" />    
</UserControl.Resources> 

<Button x:Name="Button1" 
     Width="50" Height="50"       
     Content="{Binding Source={StaticResource Icon1}}" /> 

我也试过... Content="{StaticResource Icon1}"。两者在VS 2010的XAML设计器中均表现良好,但在尝试使用XAMLParseException运行时失败。第一个人抱怨说这个论证没有落入预期的范围内,第二个只是说“无法分配财产”。将矩形复制到按钮内容中直接正常工作。

问题在哪里?我以为我终于明白这一点.. =/

我会建议使用模板,而不是设置内容。

<ControlTemplate 
    x:Key="IconTemplate"> 
     <Rectangle x:Key="Icon1" Fill="Black" Width="10" Height="10" /> 
</ControlTemplate> 

<Style x:Key="IconStyle" TargetType="Button"> 
     <Setter Property="Template" Value="{StaticResource IconTemplate}"/> 
</Style> 

<Button x:Name="Button1" 
     Width="50" Height="50"       
     Style="{StaticResource IconStyle}" /> 

HTH

+0

感谢您的回答!我想知道,为什么你会选择这种方法而不是直接设置内容? – Jens 2010-06-28 06:09:30

+0

有几个原因; 1)它似乎是MS希望我们使用WPF的方式 2)这可以更好地测试,以确保元素(模板和样式)可用于控制 3)对我来说这是一个更具可扩展性的方法,但这可能是有争议的 – 2010-06-29 16:19:33

+0

我试过这种方法,但似乎我的(triggerbehavior)模板内部的控件的VisualState不被维护。任何线索为什么? – 2014-12-11 13:40:03

我完成了这一由的ContentTemplate设置为一个DataTemplate:

<UserControl.Resources>   
    <DataTemplate x:Key="Icon1"> 
     <Rectangle Fill="Black" Width="10" Height="10" />    
    </DataTemplate> 
</UserControl.Resources> 

按钮:

<Button x:Name="Button1" 
     Width="50" Height="50"       
     ContentTemplate="{StaticResource Icon1}" /> 

设置模板上的按钮工作过,但我相信你必须替换控件的整个模板。这种方法可以让你保持现有的控制模板。

+0

...我在WPF中做了这个,但我认为它也适用于Silverlight。 – 2013-01-22 05:49:32