急急,求助解决方案(WPF 开发)

春哥撩编程 2012-04-01 04:13:06
项目总是报如下的错:

System.InvalidOperationException : Specified value of type 'System.Windows.Media.SolidColorBrush' must have IsFrozen set to false to modify.
at System.Windows.Freezable.WritePreamble()
at System.Windows.Freezable.remove_Changed(EventHandler value)
at System.Windows.ResourceReferenceExpression.ResourceReferenceExpressionWeakContainer.RemoveChangedHandler()
at System.Windows.ResourceReferenceExpression.ResourceReferenceExpressionWeakContainer.InvalidateTargetSubProperty(Object sender, EventArgs args)
at System.Windows.Freezable.FireChanged()
at System.Windows.Freezable.Freeze(Boolean isChecking)
at System.Windows.Freezable.Freeze()
at System.Windows.Freezable.System.Windows.ISealable.Seal()
at System.Windows.StyleHelper.SealIfSealable(Object value)
at System.Windows.DeferredResourceReference.GetValue(BaseValueSourceInternal valueSource)
at System.Windows.DeferredAppResourceReference.GetValue(BaseValueSourceInternal valueSource)
at System.Windows.DependencyObject.GetEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, RequestFlags requests)
at System.Windows.DependencyObject.GetValueEntry(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, RequestFlags requests)
at System.Windows.DependencyObject.GetValue(DependencyProperty dp)
at System.Windows.Controls.Border.get_Background()
at System.Windows.Controls.Border.OnRender(DrawingContext dc)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.StackPanel.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
at System.Windows.Controls.ItemsPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.StackPanel.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
at System.Windows.Controls.ItemsPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.ScrollContentPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
...全文
174 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
春哥撩编程 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

个人建议,如果没有充分的理由,那么不要调用Freeze()
也就是不要让IsFrozen 为true
[/Quote]

多谢建议。
cheng2005 2012-04-01
  • 打赏
  • 举报
回复
个人建议,如果没有充分的理由,那么不要调用Freeze()
也就是不要让IsFrozen 为true
春哥撩编程 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
你看看这些对象Freeze()之后有没有改过Color 或者别的什么属性。
[/Quote]

行,我先查下。谢谢。
cheng2005 2012-04-01
  • 打赏
  • 举报
回复
你看看这些对象Freeze()之后有没有改过Color 或者别的什么属性。
春哥撩编程 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

看看是不是有地方调用了Freeze()。
[/Quote]



pen = new Pen { Brush = Brushes.Gray, Thickness = 2 };
pen.Freeze();

LineSegment firstLine = new LineSegment(new Point(0, -5), false);
firstLine.Freeze();
LineSegment secondLine = new LineSegment(new Point(0, 5), false);
secondLine.Freeze();

PathFigure figure = new PathFigure { StartPoint = new Point(5, 0) };
figure.Segments.Add(firstLine);
figure.Segments.Add(secondLine);
figure.Freeze();

triangle = new PathGeometry();
triangle.Figures.Add(figure);
triangle.Freeze();
cheng2005 2012-04-01
  • 打赏
  • 举报
回复
看看是不是有地方调用了Freeze()。
春哥撩编程 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

第1句不是说的很清楚么
“Specified value of type 'System.Windows.Media.SolidColorBrush' must have IsFrozen set to false to modify”

IsFrozen 必须设为false
[/Quote]

我们试过了。设成False也不行。
ohkuy 2012-04-01
  • 打赏
  • 举报
回复
第1句不是说的很清楚么
“Specified value of type 'System.Windows.Media.SolidColorBrush' must have IsFrozen set to false to modify”

IsFrozen 必须设为false
春哥撩编程 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

我知道这属性是什么意思,我是想问你们为什么要设这个属性。
[/Quote]


Specifically specify that the offending resource is frozen.
For example, if the below SolidColor Brush caused this, specify it's Frozen in XAML like so.

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:po="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options">
<SolidColorBrush po:Freeze="true"/>
</Window>


我们就参照它写的。
cheng2005 2012-04-01
  • 打赏
  • 举报
回复
我知道这属性是什么意思,我是想问你们为什么要设这个属性。
春哥撩编程 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

PresentationOptions:Freeze="True"
先说为什么要设置这个属性呢?
[/Quote]


http://connect.microsoft.com/VisualStudio/feedback/details/650350/wpf-4-0-freezable-bug-writepreamble-exception-while-loading-a-ui-element
cheng2005 2012-04-01
  • 打赏
  • 举报
回复
PresentationOptions:Freeze="True"
先说为什么要设置这个属性呢?
春哥撩编程 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你是不是把颜色跟什么进行了绑定?
[/Quote]

现在项目里的STYLE 比较乱。
很多的颜色都是如下写法:
xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
<SolidColorBrush PresentationOptions:Freeze="True" x:Key="Brush_White" Color="#FFFFFF"/>
cheng2005 2012-04-01
  • 打赏
  • 举报
回复
你是不是把颜色跟什么进行了绑定?

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧