Это потому, что вы не ограничивали его совпадением со всей строкой. Следовательно, разрешено рассматривать совпадения на подмножествах строки. Очень большое подмножество строки соответствует данным, поэтому регулярное выражение возвращает true.
Попробуйте сделать следующее, чтобы оно совпадало со всем вводом.
Regex rgx = new Regex(@"^[\w-]*$");
rgx.IsMatch(searchString)