LeetCode: Trie Tree implementation, Search, Insert, startWith C#
In terms of data structures and algorithms this all looks pretty straightforward - not much to say about that.

Performance


Edges.ContainsKey and Edges[...] each perform a lookup. Edges.TryGetValue lets you achieve the same with just a single lookup.


Design


I see no reason why Trie.Head should be public, and certainly not why it should have a public setter. That's poor encapsulation. Likewise, TrieNode.Edges should be get-only: you don't want outside code to be able to do Edges = null;.
Search and StartsWith do exactly the same thing, except for the final check. I'd move the duplicate code to a TrieNode FindNode(string prefix) helper method.
TrieNode is only used internally within Trie, so it makes sense to make it a private inner class.


Other notes


You can remove Trie's constructor if you initialize Head directly: TrieNode Head { get; } = new TrieNode();. The same goes for TrieNode and Edges.
I'd replace those for loops with foreach loops, for clarity's sake.
Comparing a boolean against true is unnecessary. Just do return current.IsTerminal;
I'd replace those default LeetCode comments with C#-specific xml comments.