2010-05-11 3 views
0

Должен сказать, что я совершенно новый в WPF. Я создаю свое первое реальное приложение, и я сталкиваюсь с некоторыми проблемами, на данный момент с темами. Это причина моего поста.WPF Theming: не применяется к TextBox, почему?

Чтобы использовать тему, например ExpressionDark.xaml, я думал, что ее достаточно включить на уровне приложения. Поэтому в моем App.xaml я добавил:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Skins/ExpressionDark.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
     <myLib:Locator x:Key="Locator" /> 
    </ResourceDictionary> 
</Application.Resources> 

Вот первый вопрос: Я не уверен, что я делаю правильно. Правильно ли включать ExpressionDark.xaml в мое приложение, в папку «skins» и ссылаться на него таким образом? где-то еще я нашел что-то вроде «System.Windows.Theming.ExpressionDark» и т. д. Это был бы правильный подход?

В любом случае, применяя тему с помощью вышеуказанного метода, я вижу, что почти все мои элементы управления оформлены надлежащим образом; Я говорю «почти все», потому что некоторые из них, такие как DataGrids или TextBoxes, не являются. Я проверил внутри ExpressionDark.xaml, и я вижу, что для этих компонентов также существуют стили. Так почему я получаю это странное поведение?

Надеюсь, я объяснил все достаточно ясно. Дайте мне знать, если это не так.

Заранее благодарим за любую помощь, которую вы сможете предоставить.

Приветствия,

Г.

+0

Можете ли вы разместить код, в котором вы определяете DataGrid или TextBox. – ChrisF

ответ

0

Хорошо, я думаю, что я узнал, что происходит.

В App.xaml Я создал словарь стиля, который хотел бы использовать в моем приложении. В моем MainWindow.xaml в «локальных» ресурсах вместо этого использовался другой словарь, который, по-видимому, переопределял тот, который был унаследован App.xaml.

Я переместил локальный словарь (тот, что в окне) вместе с MergedDictionaries приложения, и все мои элементы управления были правильно написаны.

Я не понимаю, хотя причина такого поведения. Два словаря не были предназначены для столкновения, я предположил, что можно использовать общий dict в приложении и более специализированный в Window.

Итак, вы, ребята, знаете, что я на самом деле делаю неправильно?

Еще раз спасибо за вашу помощь, Cheers, Gianluca.

+1

Поскольку у вас было несколько стилей, элемент управления использовал первый, к которому он пришел, при поиске визуального дерева. Так как в Mainwindow.xaml было определено определение, то TextBox останавливается там, в то время как другие элементы управления должны идти дальше в файл App.xaml. Те элементы управления, которые не находят стиля, будут использовать хром по умолчанию. –

+0

Спасибо, Майк Б, чтобы указать на это. –

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