SolidColorBrush not reusable

In Silverlight I have just discovered by trail by fire the you should not reuse Brushes. Seems really odd coming from a Win32 GDI background to not use the same brush but the following code throws an exception on the second assignment.

SolidColorBrush  green = new SolidColorBrush();
green.Color = Colors.Green;
Run ra = new Run();
Run rb = new Run();

ra.Text = "Run A";
rb.Text = "Run B";
ra.Foreground = green;
rb.Foreground = green;

With this

Value does not fall within the expected range.

at MS.Internal.XcpImports.SetValue[T](IntPtr oPtr, UInt32 iPropertyId, T obj)
at System.Windows.DependencyObject.SetValue[T](DependencyProperty property, T obj
at System.Windows.Documents.Inline.set_Foreground(Brush value)

Hmm, what means lots to me…

So I changed how I was wiring it all up and found a better SolidColorBrush constructor as well. So it should be done like

Run ra = new Run();Run rb = new Run();

ra.Text = "Run A";
rb.Text = "Run B";

ra.Foreground = new SolidColorBrush(Colors.Green);
rb.Foreground = new SolidColorBrush(Colors.Green);

Which feels wrong, but works. I’m guess as Silverlight is not GDI based there are no window handles the manage, so it works better this way.