2009-04-03 3 views
2

WPF Noob вопрос:WPF «Skinning», т.е. замена макета окна совершенно другим

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

Как мне сделать что-то подобное? Мне просто нужна начальная точка.

Спасибо!

ответ

1

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

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

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

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

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

0

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

1

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

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

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

Смежные вопросы