Окна WPF не взаимодействуют с неофициальными темами

1969
Sasha Chedygov

Некоторое время назад я решил установить свой патч uxtheme.dll(используя Universal Theme Patcher ), чтобы разрешить использование неофициальных оконных тем. Проблема в том, что приложения WPF, кажется, игнорируют пользовательскую тему для собственных элементов управления Windows (таких как полосы прокрутки и кнопки) и вместо этого используют классическую тему для них.

Я впервые заметил это с Visual Studio 2010:

Visual Studio

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

Пользовательское приложение WPF

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

Что я могу с этим поделать? Должен ли я попробовать другой uxtheme.dllпатчер? Или это то, что я получаю за попытку [задыхаться] настроить Windows?

2
так что это причина. попытка сделать окна немного красивее делает wpf-приложения более уродливыми. Ну, вернуться к aero после использования soft7 невозможно (я пытался, но я думаю, что меня слегка затолкнуло в рот;)), поэтому мне придется живи с этим. flying sheep 12 лет назад 0
@flyingsheep: Да, вот к чему все сводится. К счастью для меня, единственным приложением WPF, которое я регулярно использую, является Visual Studio, и влияние на него действительно минимально, поэтому я едва замечаю это. В более широком масштабе, однако, с большим количеством приложений WPF, я представляю, что это будет действительно раздражать. Sasha Chedygov 12 лет назад 0

4 ответа на вопрос

2
Dwayne Samuels

В настоящее время вы ничего не можете с этим поделать. Приложения WPF имеют свою собственную тему [которая не связана с темой Windows]. Лучшее, что я могу предложить, - это написать приложение или создать свою собственную dll, которая изменит тему WPF на ту, которая вам нравится, вы получите за это большое признание;)

Хм, это действительно интересно, я этого не знал. Я посмотрю что я могу сделать. :) Sasha Chedygov 14 лет назад 0
Подтверждено. WPF содержит версию каждой встроенной темы Windows, переведенную на XAML. Я не уверен, почему, черт возьми, они будут делать что-то подобное (наверное, вы могли бы переопределить системные стили?), Но я ничего не могу с этим поделать. Вы можете теоретически написать приложение, которое берет файл «.theme» используемой вами пользовательской темы и переводит его в тему WPF, а затем внедряет его в WPF, чтобы загружать вновь созданную тему; но это * большая * работа - гораздо больше, чем я готов вложить, к сожалению. Похоже, мне придется иметь дело с дерьмовыми полосами прокрутки. :( Sasha Chedygov 14 лет назад 0
Я думаю, до тех пор, пока вы не используете WinXP, Vista Basic или 7 Basic, ваши панели и кнопки, если не стилизованные, будут выглядеть довольно хорошо Dwayne Samuels 14 лет назад 0
Да, но представьте, что кто-то использует тему темного цвета. Серебряные полосы прокрутки и кнопки выглядели бы действительно не к месту. : / Sasha Chedygov 13 лет назад 0
1
AlexKven

Есть хороший обходной путь для этой проблемы. Следующая процедура скажет WPF использовать тему Windows Vista / 7 вместо Windows Basic (для элементов управления).

Причина, по которой использование новой темы вызывает эти проблемы, заключается в том, что wpf выясняет, какая тема установлена, проверяя имя файла активированного в данный момент визуального стиля. Если имя «aero.msstyles», оно использует тему aero. Если это «luna.msstyles», он идет на один шаг дальше и проверяет текущую цветовую схему для точной настройки цветов (NormalColor, Metallic, Homestead - это цветовые схемы для Windows XP, Windows Vista полностью отбрасывает концепцию цветовой схемы в пользу окна аэро). В wpf также есть встроенная тема для royale.msstyles. Если у файла темы есть имя, которое wpf не распознает, он просто использует базовую тему Windows.

Обходной путь? Переименуйте ваш визуальный стиль из " .msstyles" в "aero.msstyles", затем измените связанные с ним файлы ".theme" в блокноте, чтобы учесть новое имя (обратите внимание, что теперь вы можете применять визуальный стиль только с темой файл). WPF теперь показывает стиль Windows Vista вместо Windows Basic ;-).

Это хороший обходной путь, безусловно, но он не решает основную проблему. Скажем, я использовал темную тему - стандартные элементы управления Aero выглядели бы действительно не к месту. Но в любом случае, отличная находка! Спасибо! Sasha Chedygov 12 лет назад 0
0
Kyle

Я также задавал этот вопрос некоторое время назад и не мог найти никаких ответов.

https://stackoverflow.com/questions/7495906/visual-studio-2010-classic-system-theme

Единственная тема, которую поддерживает Visual Studio 2010, - это тема по умолчанию. Хотя я заметил, что некоторые темы поддерживают это, но большинство - нет.

Я попробовал все, в основном, запуск VS2010 в качестве администратора, запуск в режиме совместимости, установка / удаление SP1 и т. Д.

Мы должны соблюдать правила Microsoft: P

Имеет смысл, что Visual Studio не будет поддерживать пользовательские темы. Теоретически, для Windows XP программист должен поддерживать и предоставлять, а Windows XP представляет собой действительно странную проблему для программистов, «поддерживающих» пользовательскую тему и не имеющих большого количества инструменты для этого. Ramhound 12 лет назад 1
0
tfw

извините, у меня не было достаточно «точек», чтобы комментировать или уточнить из контекста ответа AlexKven

Просто хотел добавить, для тех, кто заинтересован ...

в *.themeфайле вы должны указать aero.msstylesв Titlecase. поэтому он должен читать что-то вроде Path=%ResourceDir%\themes\path\to\Aero.msstylesв противоположность ...\aero.msstyles.

смотрите также: github.com/riverar/uxstyle