Используйте стиль с установщиком, нацеленным на DataGridColumnHeader:
<DataGrid>
<DataGrid.Resources>
<Style BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="Blue" />
</Style>
</DataGrid.Resources>
</DataGrid>
Вы на правильном пути, но вас зацикливает компилятор C, что немного архаично. Компилятор задыхается, потому что определение протокола недоступно в то время, когда вы его используете. @protocol DragDropImageViewDelegate
должен быть определен, прежде чем вы сможете использовать id
в качестве типа. Вы можете переместить определение @protocol перед использованием (т.е. перед вашим @interface) или добавить
@protocol DragDropImageViewDelegate;
перед @interface (прямое объявление) и оставить объявление @protocol на месте.
Как правило, я сначала определяю протокол, которому предшествует
@class DragDropImageView;
. Но вы можете сделать обратное, и перед ним:
@protocol DragDropImageViewDelegate;
На мой взгляд, протокол является важной частью объявления и обычно бывает довольно коротким, поэтому я предпочитаю, чтобы он шел первым, а не терялся в нижней части файла заголовка, но это вопрос вкуса.