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

C# 将按钮内容数据绑定到静态资源失败,c#,silverlight,xaml,visual-studio-2010,silverlight-4.0,C#,Silverlight,Xaml,Visual Studio 2010,Silverlight 4.0,我试图在Silverlight 4用户控件的资源中设计一组图标,然后在按钮上显示这些图标 我有 <UserControl.Resources> <Rectangle x:Key="Icon1" Fill="Black" Width="10" Height="10" /> </UserControl.Resources> 及 我也试过。。。Content=“{StaticResource Icon1}”。

我试图在Silverlight 4用户控件的资源中设计一组图标,然后在按钮上显示这些图标

我有

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


我也试过
。。。Content=“{StaticResource Icon1}”
。两者在VS2010的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

我通过将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}" /> 


在按钮上设置模板也可以,但我相信您必须替换控件的整个模板。此方法允许您保留现有的控件模板。

谢谢您的回答!我想知道,为什么你会选择这种方式而不是直接设置内容?有几个原因;1) 这似乎是微软希望我们使用WPF的方式2)这可以更好地测试,以确保控件可以使用元素(模板和样式)3)对我来说,这是一种更具可伸缩性的方法,但这可能是有争议的。我尝试了这种方法,但我的(触发行为)模板内控件的可视状态未维护。有什么线索吗?…我在WPF中这样做了,但我认为它也适用于Silverlight。
<Button x:Name="Button1"
        Width="50" Height="50"                        
        ContentTemplate="{StaticResource Icon1}" />