Это зависит от того, какое имя вы даете, это имя файла, в котором определено окно, или имя класса.Обычно это одно и то же, но они могут отличаться.
Например, вы можете поместить в файл "Elephant.xaml" следующее:
<Window x:Class="Animals.Pachyderm" ...>
...
</Window>
Если вы это сделаете, тоимя файла окна "Elephant.xaml", но имя класса "Pachyderm" в пространстве имен "Animals".
Загрузка окна с указанным именем файла
Чтобы создать экземпляр и показать окно с именем файла:
var window = (Window)Application.LoadComponent(new Uri("Elephant.xaml", UriKind.Relative));
window.Show();
Таким образом, ваш метод будет выглядеть примерно так:
void ShowNamedWindow(string windowFileName)
{
var window = (Window)Application.LoadComponent(new Uri(windowFileName + ".xaml", UriKind.Relative));
window.Show();
}
И будет вызываться так:
ShowNamedWindow("Elephant");
Загрузка окна с именем класса
Для создания и отображения окна с именем класса:
var window = (Window)Activator.CreateInstance(Type.GetType("Animals.Pachyderm"));
Таким образом, ваш метод будет выглядеть примерно так:
void ShowNamedWindow(string className)
{
var window = (Window)Activator.CreateInstance(Type.GetType("Animals." + className));
window.Show();
}
И вызываться так:
ShowNamedWindow("Pachyderm");
В качестве альтернативы вы можете включить пространство имен (в данном примере «Животные») в параметр ShowNamedWindow вместо добавления его внутри метода.
Загрузка окна с указанием только заголовка
Это не рекомендуется, поскольку это может быть очень дорогостоящей операцией.Вам потребуется получить сборку, выполнить итерацию всех типов в сборке, которые являются подклассом Window, создать экземпляр каждого из них и извлечь его свойство Title.Это фактически создаст (но не покажет) одно окно каждого типа в вашем приложении, пока оно не найдет правильное.Поэтому я бы использовал имя файла или имя класса, если это вообще возможно.