<UserControl x:Class="FlowItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="300" Height="300">
<UserControl.Resources>
<Style TargetType="Label">
<Style.Setters>
<Setter Property="Background" Value="AliceBlue" ></Setter>
</Style.Setters>
</Style>
</UserControl.Resources>
<DockPanel Height="300" Width="300" LastChildFill="False" Background="Transparent">
<Label Height="28" DockPanel.Dock="Top"></Label>
<Label Height="28" DockPanel.Dock="Bottom">What ever</Label>
<Label Width="28" DockPanel.Dock="Left"></Label>
<Label Width="28" DockPanel.Dock="Right"></Label>
</DockPanel>
如何通过样式设置标签的背景? 谢谢!
答案 0 :(得分:0)
您发布的代码 实际上是通过样式设置标签的背景。效果很好。
我假设您正在尝试执行此类操作,并且被告知SetterCollectionBase已被密封:
setter.Value = Brushes.Green;
要更改代码中样式设置的背景画笔,可以在某处定义DependencyProperty,然后绑定到它。例如,如果您的FlowItem类具有DependencyProperty“LabelBackgroundColor”,您可以在样式中设置绑定,如下所示:
<Setter Property="Background" Value="{Binding LabelBackgoundColor, RelativeSource={RelativeSource FindAncestor, AncestorType=local:FlowItem}}" />
请注意,您还需要一个xmlns:local = definition。
声明DependencyProperty并使用新的setter值,您可以在代码中执行此操作:
myFlowItem.LabelBackgroundColor = Color.Green;
一般情况下,我建议不要直接在UserControls上创建LabelBackgroundColor等属性。通常,更好的解决方案是使用基于反映目的的FlowItem的实际属性的触发器,例如,如果您希望在修改FlowItem时更改标签颜色,则可以使用“IsModified”属性。
答案 1 :(得分:0)
实际错误告诉我在setter上调用了Setter.Seal(),后来的项目正在从该集合中添加或删除(即调用了Add,Insert,Remove或Clear)。我在XAML中看不到会导致这种情况的任何内容,代码编译对我来说很好。
我创建了一个空的VS2008 C#“WPF应用程序”项目,将XAML作为松散的XAML文件添加到其中,后面没有代码,并在末尾添加了缺少的标记。生成的项目编译得很好,我可以将UserControl添加到窗口并查看它。
尝试使用相同的步骤。如果它在空项目中工作但不在您的项目中,则比较项目以查找导致问题的原因。这里有一些要检查的事情:
如果您的XAML甚至不能在从C#WPF应用程序模板创建的全新空项目中工作,那么需要检查以下内容:
答案 2 :(得分:-2)
A有类似错误:&#34;使用Style(密封)后,无法修改。&#34;
对我来说问题解决了,当我重建整个解决方案时。
可能VS(我使用2012)在源或引用中链接错误