WPF "Skinning", т. Е. Замена разметки окна на совершенно другую - PullRequest
2 голосов
/ 03 апреля 2009

WPF Noob вопрос:

Могут ли приложения WPF изменять внешний вид приложений во время выполнения? Я понимаю, что с помощью стилей можно изменить внешний вид элементов управления и элементов пользовательского интерфейса, но я придумал нечто большее, имея в виду наличие двух приложений: одного приложения «редактор» и приложения «игра», которые по сути выполняют один и тот же код но с совершенно другим макетом пользовательского интерфейса (последний имеет меньше кнопок, более простые элементы управления, пункты меню и т.д.). Макет «игрового» интерфейса может быть разработан художником, обычно тем, у кого нет доступа к базовому коду.

Как мне поступить так? Мне просто нужна отправная точка.

Спасибо!

Ответы [ 3 ]

1 голос
/ 20 июля 2010

Не зная точно, к чему вы стремитесь, я бы предложил использовать MVVM. То, что вы описали, это классический MVVM. У вас есть одна модель, но у вас много представлений, в вашем случае 2, для одной и той же модели.

Таким образом, если вы используете какую-то инфраструктуру MVVM, вы можете использовать внедрение зависимостей для отображения разных представлений в зависимости от того, в каком контексте вы работаете.

Я большой поклонник Prism, но есть много доступных сред MVVM. Возможно, вам даже не удастся использовать 1 модель, 1 модель просмотра и 2 просмотра.

1 голос
/ 03 апреля 2009

У вас есть практически неограниченная гибкость для управления внешним видом вашего приложения WPF во время выполнения, поэтому то, что вы предлагаете, вполне осуществимо.

Не зная всех подробностей вашего приложения, похоже, вы могли бы создать два разных набора элементов управления пользовательским интерфейсом, один для редакторов, а другой для геймеров, и оба использовать одни и те же базовые логические классы biz.

Чтобы выбрать, в каком режиме запускать ваше приложение во время выполнения, нужно решить, какого типа пользователя вы добавите, и соответствующим образом разместить элемент управления редактора или пользовательского интерфейса в контейнере основного макета.

private void Window_Loaded(object sender, RoutedEventArgs e)
{
     if(user == editor) {
         this.LayoutRoot.Children.Add(editorUserControl);
     }
     else {
         this.LayoutRoot.Children.Add(gamerUserControl);
     }
}

И есть множество других способов сделать это.

0 голосов
/ 03 апреля 2009

Посмотрите на PhotoSuru для примера приложения, которое динамически меняет свой макет (в соответствии с размером окна)

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