数据绑定按钮内容到静态资源失败
问题描述:
我想在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
答
我完成了这一由的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
感谢您的回答!我想知道,为什么你会选择这种方法而不是直接设置内容? – Jens 2010-06-28 06:09:30
有几个原因; 1)它似乎是MS希望我们使用WPF的方式 2)这可以更好地测试,以确保元素(模板和样式)可用于控制 3)对我来说这是一个更具可扩展性的方法,但这可能是有争议的 – 2010-06-29 16:19:33
我试过这种方法,但似乎我的(triggerbehavior)模板内部的控件的VisualState不被维护。任何线索为什么? – 2014-12-11 13:40:03