Thanks everyone, I got it mostly worked out. I'm new to silverlight so I appreciate the feedback on things like inline (which I'd never even heard of).
Here's how I ended up doing it if anyone else runs into this situation:
StringBuilder _chat = new StringBuilder(txtChatOut3.Text);
txtChatOut3.Text = _chat.ToString();
Run _color = new Run();
Run _white = new Run();
_color = new Run();
_color.Text = "peach\n";
_color.Foreground = new SolidColorBrush(Color.FromArgb(255, 117, 189, 226));
txtChatOut3.Inlines.Insert(0, _color);
_white = new Run();
_white.Text = " and a ";
txtChatOut3.Inlines.Insert(0, _white);
_color = new Run();
_color.Text = "diet coke";
_color.Foreground = new SolidColorBrush(Color.FromArgb(255, 117, 189, 226));
txtChatOut3.Inlines.Insert(0, _color);
_white = new Run();
_white.Text = "Ben: I would like a ";
txtChatOut3.Inlines.Insert(0, _white);
The trick is to build the sentence backwards. Otherwise, I wasn't able to insert the text in the top of the 'chat' window (normally I would have used a stringbuilder type of thing, but formatting is lost if you stuff it in there).
One odd thing, unless I do these lines at the top, very very odd things happen...
StringBuilder _chat = new StringBuilder(txtChatOut3.Text);
txtChatOut3.Text = _chat.ToString();
I'm not sure why I couldn't just insert using inline the colored text the way I need it without first loading the contents of the textblock again, but for now this works. The only bad thing is I lose the formatting for all the text that was in there, but for now I guess this is ok.
Maybe I'm overlooking something... feedback welcome. But I think this is a bug, it's really really odd how the control acts if I don't reload the contents first.
Thanks all,
rick