I cannot speak with WPF specifically, but as someone who wrote (not officially supported) the libraries for Microsoft:
1) It does not violate the principles of OOP. DO NOT hide methods from external assemblies for which they have no reason - this will violate them. (Improper encapsulation)
2) This prevents the display of a heap of garbage that you do not need to use for the intellisense class. (which really is part number 1, but I’ll call him on purpose, because this is a big deal)
3) This simplifies testing.
I am sure there are other reasons that I do not think about.
In my particular case, I had a base class that wrapped the C Win32 API, and each derived class had to handle one of the three main uses of the API. For this, special methods had to be reevaluated. There is absolutely no reason for the end user of these classes to see this garbage.
I also want to note that in my particular case, I also found internal unacceptable, because I also wanted protected so that the class had to be internal for the AND assembly, derived from the base class, to access or override the method. protected internal allows either OR, and private protected not available at that time. I ended up finding an alternative approach that I can no longer recall. The point, I suspect, but not sure, is that internal is probably incorrect encapsulation in the sense that private protected would be preferable if it were available. (Although I understand that the CLR has always supported it. It's just not C # or VB.NET)
Last note: after reading your comments, I may have missed the real drift of your question. Experienced methods at Thumb probably process the material for the base class, and you should not impose direct output on you. Either because it will be too complicated, or because all possible derivatives are handled by derived classes. (For example, the base Shape class for the API for a mechanism that processes only rectangles and triangles. Given the Rectangle and Triangle , you have no reason to deduce from Shape. And at this point, there are probably Rectangle and Triangle stuff that processes the virtual methods that the you have no reason to know.) Another possible thing is methods that are processed in the base class, which can be obtained, but can be overridden for optimization purposes ... but only domestically because the open API surface area is simply not worth it.