在使用(密封)“SetterCollectionBase”之后,无法修改它

时间:2009-11-06 02:14:07

标签: wpf xaml styles

<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>

如何通过样式设置标签的背景? 谢谢!

3 个答案:

答案 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添加到窗口并查看它。

尝试使用相同的步骤。如果它在空项目中工作但不在您的项目中,则比较项目以查找导致问题的原因。这里有一些要检查的事情:

  • 项目是否具有相同的参考文献?
  • 项目是否具有相同的构建设置,包括目标框架?
  • 您的常规项目是否在任何地方使用“UserControl”,“Style”,“Setter”等术语?
  • 你的常规项目是否会消除代码隐藏?

如果您的XAML甚至不能在从C#WPF应用程序模板创建的全新空项目中工作,那么需要检查以下内容:

  • 您是否安装了测试版软件(特别是VS.NET或.NET Framework),或者您是否曾经使用过该软件,如果是这样的话,那么它就完全删除了
  • 尝试使用MSBuild编译项目以查看问题是否与IDE相关
  • 尝试下载一个使用样式并编译它的工作WPF项目,例如Kevin's Bag Of Tricks(sp?)
  • 作为最后的手段尝试重新安装.NET Framework,如果这不起作用,Visual Studio

答案 2 :(得分:-2)

A有类似错误:&#34;使用Style(密封)后,无法修改。&#34;

对我来说问题解决了,当我重建整个解决方案时。

可能VS(我使用2012)在源或引用中链接错误