The problem is that the interface says the Property has to be of type IBehavior and not Behaviorclass. To have a typesafe accessor in Itemclass and still adhere to the interface do the following: public class Itemclass : IBehaviorActing { public Behaviorclass Behavior { get {...} } IBehavior IBehaviorActing.Behavior { get { this.Behavior; } } } The compiler will call the normal Behavior property whenever you access Behavior via the concrete class. Whenever it is accessed via an interface variable it will access the interface implemenation (which in turn calls the typesafe one). I regulary use these constructs. It's also extremely useful when working with the ICloneable interface.
Question asked, Answer given... I looked a bit and found those here: http://www.codeproject.com/cs/miscctrl/alphablendtextbox.asp http://www.thecodeproject.com/cs/miscctrl/AlphaBlendedTextControls.asp If I'l succeed I will post another answer.
Make sure you pass StringFormat with MeasureTrainingSpaces: StringFormat format = new StringFormat(StringFormatFlags.MeasureTrailingSpaces); g.MeasureString(..., format);