Как загрузить файл xaml без создания внешнего объекта? - PullRequest
1 голос
/ 10 апреля 2009

Можно ли загрузить файл xaml с диска (т.е. не из ресурса приложения) и создать дерево объектов без создания внешнего объекта? Другими словами, я хочу создать класс, производный от Window и загружающий файл xaml с диска. Кажется, я могу либо создать класс, который не является производным от Window и может загружаться с диска, либо я могу создать класс, производный от Window, но загружающий xaml из ресурса приложения.

Например, я могу сделать это:

XmlTextReader xmlReader = new XmlTextReader("c:\\mywindow.xaml");
object obj = XamlReader.Load(xmlReader);
Window win = obj as Window;

но то, что я действительно хочу сделать, это:

class MyWindow : Window
{
    public MyWindow()
    {
        System.Uri resourceLocater = new System.Uri("file://c:/mywindow.xaml", UriKind.Absolute);
        System.Windows.Application.LoadComponent(this, resourceLocater);
    }
}
...
MyWindow w = new MyWindow();

В настоящее время второй бит кода дает исключение, говорящее, что uri не может быть абсолютным.

Ответы [ 2 ]

1 голос
/ 09 мая 2012

Вы можете загрузить содержимое файла XAML в строку, а затем проанализировать содержимое, например:

        try
        {
            string strXaml = String.Empty;
            using (var reader = new System.IO.StreamReader(filePath, true))
            {
                strXaml = reader.ReadToEnd();
            }

            object xamlContent = System.Windows.Markup.XamlReader.Parse(strXaml);
        }
        catch (System.Windows.Markup.XamlParseException ex)
        {
            // You can get specific error information like LineNumber from the exception
        }
        catch (Exception ex)
        {
            // Some other error
        }

Тогда вы сможете установить xamlContent в свойство Content окна.

Window w = new Window();
w.content = xamlContent;
w.ShowDialog();
0 голосов
/ 10 апреля 2009

Я не уверен, что вы можете загрузить сборку с абсолютным путем, указывающим на файл где-нибудь в файловой системе.

У меня была похожая проблема несколько дней назад, возможно, мой пост может помочь (посмотрите на редактирование моего ответа):

Загрузка ResourceDictionary из сборки

edit : Я только что увидел, что вы хотите загрузить xaml, а не сборку? Затем проверьте System.Windows.Markup.XamlReader, возможно, это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...