So your question consists of 2 problems:
- Create a seed from the 2 - floatvalues that always maps the same input to the same seed.
 
- Using a seed to generate a random - float.
 
For the first problem this can be solved by creating a hashcode, there are different ways to do it but I'll refer to this answer by John Skeet for more information on that. For you the hashing would look like this:
public int GetHashCode(float x, float y)
{
    unchecked // Overflow is fine, just wrap
    {
        int hash = (int)2166136261;
        // Suitable nullity checks etc, of course :)
        hash = (hash * 16777619) ^ x.GetHashCode();
        hash = (hash * 16777619) ^ y.GetHashCode();
        return hash;
    }
}
So now problem 1 is solved we can move on to problem 2, here we have a problem since you require a float which the Random class doesn't support. If a double is good enough for you (floats from your PerlinNoise can be converted to double's), you could then do this:
public double GenerateRandom(float x, float y)
{
    return new Random(GetHashCode(x, y)).NextDouble();
}
If double is not good enough and you require it to be a float, I'll refer to this answer, all his solutions should work with a Random instance created using the hash function above as seed.
Hope this helps and good luck with your project!