Как скрыть, включить, изменить графические интерфейсы WPF для разных типов пользователей? - PullRequest
4 голосов
/ 11 марта 2011

Итак, я хочу реализовать admin, non-admin (casual) привилегии пользовательского стиля для приложения, но это только на уровне графического интерфейса.

Так, например, чтобы отключить несколько GridViewColumns, скрыть некоторые кнопки и т. Д.

Как правильно сделать это в WPF?

Я планирую реализовать перечисление для пользовательских типов. Но после этого я не уверен, как включить / отключить GridViewColumns, скрыть / показать кнопки.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

Это зависит от того, хотите ли вы иметь возможность менять темы (потому что по сути это то, что вы хотите делать) на лету (я полагаю, вы это делаете).

Я сам этого не делал, но думаю, что так должно быть:

  1. Используйте ContentTemplate или DataTemplate для каждого элемента пользовательского интерфейса, который вы хотите сделать
  2. Обратитесь к этим шаблонам, используя {DynamicResource}
  3. Получить ресурсы из ресурсов вашего приложения; вы разместите их там как ResourceDictionary объектов, по одному на каждую "тему", используя ResourceDictionary.MergedDictionaries
  4. Всякий раз, когда вы хотите изменить «тему», программно удалите все текущие объединенные словари и добавьте тот, который соответствует нужной «теме»

Для иллюстрации ваш Application будет использовать словарь по умолчанию, например:

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="themes\default.theme.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>

И вы бы добавили / удалили словари с чем-то вроде

ResourceDictionary theme = (ResourceDictionary)Application.LoadComponent(themeUri);
Resources.MergedDictionaries.Add(theme);

Обновление: Я немного искал и нашел более полный пример того, что я описываю: Можно ли использовать темы WPF для включения нескольких обложек для приложения, которое можно изменить во время выполнения?

2 голосов
/ 11 марта 2011

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

...