2012-06-01 3 views
0

У меня есть словарь ресурсов, в котором я определил стили и шаблоны управления для своего приложения. Теперь я хочу определить больше Словари ресурсов, чтобы настроить различные разрешения экрана, по одному для каждого разрешения экрана. Как я могу определить разрешение экрана клиента и загрузить конкретный словарь ресурсов в App.XAML?Загрузка различных ресурсных словарей для разных разрешений экрана

Мой текущий app.xaml:

<ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Resources\BlueYellow\BlueYellowTheme.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 
+0

Честно говоря, я бы не сделать это. WPF предоставляет все с Vectors и имеет очень приятный макет. Резолюция должна быть очень незначительной. Но это просто предложение. – dowhilefor

+0

Спасибо dowhilefor. На самом деле я использую изображения в элементах управления. Если разрешение изображения равно 72x72, тогда кнопки выглядят уродливыми при более низких разрешениях экрана. Я хочу использовать разрешения 48x48 или 32x32 для этих разрешений. –

+0

Хорошо, с изображениями это имеет смысл. Но вы можете запросить эти изображения из кода. Мы используем систему, которая хранит изображения внутри с ключом, и мы написали MarkupExtension, чтобы вызвать его как Image = "{Stock SaveIcon, Size = 64}", что-то подобное может вам помочь. И, конечно же, вы можете изменить App.xaml прямо в коде. используя Application.Resources в коде C#. – dowhilefor

ответ

1

Я думаю, что вы можете сделать MarkupExtension, который возвращает соответствующий словарь URI ресурса в зависимости от разрешения и использовать его как это:

<ResourceDictionary Source="{ThemeUriAccordingToCurrentResolution}" /> 
+1

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

+0

Да, именно так. – Nikolay

1

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

App.cs

protected override void OnStartup(StartupEventArgs e) 
{ 
    // Get the width and height, you might want to at least round these to a few values. 
    var width = System.Windows.SystemParameters.PrimaryScreenWidth; 
    var height = System.Windows.SystemParameters.PrimaryScreenHeight; 

    // make the resource path from them. 
    string resourceName = string.Format("Themes\resource{0}x{1}", width, height); 

    // Add the resource to the app. 
    Application.Current.Resources.MergedDictionaries.Add((ResourceDictionary)Application.LoadComponent(new Uri(resourceName, UriKind.Relative))); 

    base.OnStartup(e); 
} 
Смежные вопросы