Изменение стиля WPF DataGrid

У меня есть следующий XAML для пользовательского DataGrid:

<Controls:ResourceDataGrid 
    x:Name="resourceDataGrid" 
    AutoGenerateColumns="false" 
    Style="{StaticResource MetroDataGrid}" 
    ItemsSource="{Binding Path=Resources, 
                          Mode=TwoWay,
                          UpdateSourceTrigger=PropertyChanged, 
                          IsAsync=True}" 
    ...
    AttachedCommand:CommandBehavior.Event="CellEditEnding"
    AttachedCommand:CommandBehavior.Command="{Binding DynamicColumnTargetChangedCommand}">
    ...
</Controls:ResourceDataGrid>

Я стилизую элемент управления в соответствии с MahAppsMetro, и сетка выглядит великолепно. Однако, когда я меняю «тему»/«акцент» приложений, все окна меняют цвет, и все элементы управления MahAppsMetro также меняются, но DataGrid, о которых я подробно рассказал выше, не меняется.

DataGrid имеет стиль MetroDataGrid, так почему этот элемент управления не обновляется, и что мне нужно сделать, чтобы он обновил цвет «темы»/«акцента» для этого элемента управления?

Спасибо за ваше время.


person MoonKnight    schedule 18.11.2013    source источник
comment
Не могли бы вы подробнее объяснить эту строку: Style={StaticResource MetroDataGrid}?   -  person dev hedgehog    schedule 19.11.2013
comment
MetroDataGrid - это "StaticResource", который загружается из библиотеки MahAppsMetro... Будем признательны за любые идеи. Спасибо за ваше время...   -  person MoonKnight    schedule 19.11.2013


Ответы (1)


Темы работают только на CustomControls. Чтобы предоставить различные «скины» для элементов управления, вам необходимо иметь проект CustomControlLibrary с файлом XAML с именем generic.xaml.

Вы можете найти краткое базовое описание на странице Themes/generic.xaml на Мартинса 10 или, если вы предпочитаете более подробное описание, вы можете найти полное описание в Контроль авторского обзора на странице MSDN.

person Sheridan    schedule 19.11.2013
comment
Спасибо за ваш ответ @Sheridan. В ближайшее время я подробно рассмотрю ссылки. Поскольку я стилизую элемент управления в соответствии с упомянутой библиотекой, тот факт, что стиль элементов управления действительно заимствован из указанной библиотеки, я предположил, что любое изменение стиля для базовой библиотеки также должно изменить мой элемент управления? - person MoonKnight; 19.11.2013
comment
Вы написали собственную реализацию DataGrid, которая просто использует Style из MahAppsMetro.dll. Style не обновляются при смене «скинов», вместо этого используется другой Style. Однако все это происходит только потому, что DataGrid зарегистрировал свое имя/тип и Styles в generic.xaml, тогда как вы не зарегистрировали свое. Это то, что делается, когда вы определяете CustomControl. - person Sheridan; 19.11.2013