For platform-dependent functionality in a PCL the obvious answer (other than giving up) is dependency injection of some sort, or using a service locator. Your example seems to me to be a good use of DI in general, even ignoring the actual limitations of PCLs - you really are plugging in different behaviour.
"Platform enlightenment" ala RX is another approach (good overview of all these approaches here), where the PCL loads additional assemblies via reflection.
In either case you'll increase your project count. I think there's an argument that putting as much into a PCL as possible and separating out platform-specific functionality into separate small chunks is cleaner than a big shared library which is linked from multiple projects, where the distinction between shared and #if-conditional code is less obvious.
As to the question "can you say if (platform == WP7)", your PCL can't contain platform-conditional code, though a PCL could target a subset of platforms all of which contain the required functionality.