Я провел быструю проверку, и, похоже, она не работает ни с подходом для тегов , ни с подходом ImplicitStyleManager .Вероятно, это связано с тем, что установщик стилей находится за пределами области действия и поэтому применяется без темы.
Предложение 1: посмотрите, как тема Jet Pack обрабатывает ее с помощью словарей ресурсов в приложении.xaml, и попробуйте сделать что-то подобное.(Для этого вам понадобится файл theme.xaml. РЕДАКТИРОВАТЬ: Эта ссылка может помочь .) Если вы хотите изменить тему динамически, рассмотрите этот (старый) пост о обмене темами в ресурсесловари (я не пробовал, но он должен работать).
Предложение 2: Вам нужно подумать о наследовании стиля.Поскольку «BasedOn» нужен тег x:Key
, вы можете вместо этого скопировать неявный стиль темы DataGridColumnHeader
и изменять только те части, которые вам интересны. (Не знаю, есть ли более элегантный способ.)
Если это не то, что вы имели в виду, пожалуйста, предоставьте больше примера кода.
РЕДАКТИРОВАТЬ [2010-12-09]:
Я посмотрел код,и я считаю, что корень проблемы заключается в отсутствии наследования стилей.Ваш «DataGridHeaderStyle» говорит: «Не используйте обычный стиль DataGridColumnHeader, а вместо этого используйте этот TextBlock внутри этой Grid».Таким образом, Silverlight делает именно это: он предоставляет вам стилизованный TextBlock в нестандартном DataGridColumnHeader по умолчанию.
Proof: Обновите ваш "Home.xaml" и добавьте TextBox во второй столбец вашего "DataGridHeaderStyle "style, рядом с текущим TextBlock.Обратите внимание, как тема для TextBox в заголовке меняется каждый раз, когда вы меняете тему (посмотрите на текстовую рамку), но фон заголовка столбца привязан к цвету по умолчанию.Как я уже говорил, ваш пользовательский стиль говорит Silverlight игнорировать неявный стиль.
FIX: Я не знаю, как наследовать неявные стили без атрибута "x: Key".Я немного погуглил, но не смог найти ничего полезного.Вам либо нужно: а) создать собственный стиль определения столбцов для всех ваших заголовков сетки данных, либо вам придется б) побеспокоить команду Silverlight для получения новой функции в следующей версии Silverlight.Или c) выберите одну тему, чтобы придерживаться ее, и отредактируйте копию неявного стиля заголовка столбца темы в качестве нового стиля «DataGridHeaderStyle».
Мой отпуск скоро начнется, поэтому я надеюсь, что это помогло.По крайней мере, теперь вы знаете, в чем проблема.