The idea of the cross-attention layer is to transform the input words to output words. The Decoder provides context of which input words should we pay attention to next based on the already decoded text.
If the values in the cross-attention came from the decoder as you suggest, we would have to have access to the already translated sentence to translate the sentence, which is absurd.
For example, suppose we are going to translate the sentence "में बैडमिंटन खेलने जा रहा हूँ " in Hindi to English : "I am going to play badminton".
And suppose we are have already translated "I am going to play _" and are looking for the next word : "badminton". In this case the decoder self-attention guesses that the next word is going to be a sports name. The query cross-attention linear layer now transforms the input vector to align with the corresponding vector representation in Hindi for sports names. Now amongst the input words the hindi representation of 'badminton' aligns the most with query vector and thus we know that what the next word to transform to English is.
Now what is left, is to do the actual transformation from Hindi representation of badminton to the English representation. The value linear layer handles that part.
The dot product is able to work because the vector representation of words follows a pattern as shown by the papers referred here : https://kawine.github.io/blog/nlp/2019/06/21/word-analogies.html