Silverlight 4: изменение фона ContentTemplate - PullRequest
1 голос
/ 23 ноября 2010

У меня есть стиль заголовка для моего пользовательского заголовка сетки данных. Я использую тему для своего приложения. Проблема здесь в том, что фон заголовка сетки данных не меняется, однако, когда я удаляю стили, фон заголовка не имеет проблем, он меняется.

Вот темы

Вот мой пример приложения , щелкните правой кнопкой мыши сетку и появится контекстное меню для списка тем, выберите разные темы. У меня есть два столбца, а именно, со стилем заголовка и без стиля заголовка. Увидеть разницу. Спасибо за вашу помощь.

<Style x:Key="DataGridHeaderStyle" TargetType="primitive:DataGridColumnHeader">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <Grid HorizontalAlignment="Stretch">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding}" Grid.Column="0" HorizontalAlignment="Left" />
                        <filter:DataGridColumnFilter Grid.Column="1" HorizontalAlignment="Right" />
                    </Grid>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Спасибо

1 Ответ

0 голосов
/ 08 декабря 2010

Я провел быструю проверку, и, похоже, она не работает ни с подходом для тегов , ни с подходом 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».

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

...