Я пытаюсь использовать ItemContainerStyleSelector для отображения различных стилей строк в сетке, в зависимости от типа объекта, определяющего строку (ItemsSource представляет собой совокупность IGridItem
с, есть GridItem
и GridSeparator
, которые должны иметь разные стили). моя проблема заключалась в том, что SelectStyle
моего StyleSelector никогда не назывался. Теперь я узнал (here) проблема может быть унаследованным стилем (библиотека Metro MahApps переопределяет стили по умолчанию всех стандартных элементов управления), которые, вероятно, уже устанавливают ItemContainerStyle.WPF DataGrid StyleSelector для строк
Итак, теперь мой вопрос: есть ли способ использовать мой StyleSelector, чтобы унаследованный стиль был базой для выбранных стилей? А если нет, как мне достичь другого стиля только для некоторых строк на основе их типа объекта?
EDIT:
Ручная настройка на ItemContainerStyle в null
не имеют эффекта, SelectStyle
моего StyleSelector никогда еще не называли.
EDIT2:
Поскольку я не получаю System.Windows.Data Error: 24 : Both 'ItemContainerStyle' and 'ItemContainerStyleSelector' are set; 'ItemContainerStyleSelector' will be ignored.
как спросил Grx70, я полагаю, что ItemContainerStyle не проблема, как я сначала думал.
jstreet отметил, что это связано с MahApps.Metro, хотя ... (см свой комментарий)
Моя текущая реализация:
<DataGrid ItemsSource="{Binding Items}" ItemContainerStyleSelector="{StaticResource StyleSelector}">
Syle селектор:
public class GridRowStyleSelector : StyleSelector
{
private readonly ResourceDictionary _dictionary;
public GridRowStyleSelector()
{
_dictionary = new ResourceDictionary
{
Source = new Uri(@"pack://application:,,,/myApp;component/View/GridResources.xaml")
};
}
public override Style SelectStyle(object item, DependencyObject container)
{
string name = item?.GetType().Name;
if (name != null && _dictionary.Contains(name))
{
return (Style)_dictionary[name];
}
return null;
}
}
GridResources.xaml с тестовыми значениями:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="GridItem" TargetType="DataGridRow">
<Setter Property="BorderThickness" Value="3"/>
</Style>
<Style x:Key="GridSeparator" TargetType="DataGridRow">
<Setter Property="BorderBrush" Value="Red"/>
</Style>
</ResourceDictionary>
Как раз для того чтобы получить его от таблицы - вы уверены, '' {StaticResource StyleSelector} 'разрешает экземпляр' GridRowStyleSelector'? – Grx70
Подпись метода для стиля Select: public override Style SelectStyle (объект объекта, контейнер DependencyObject) – Manolo
Кроме того, вы получаете сообщение об ошибке System.Windows.Data: 24: установлены оба параметра ItemContainerStyle и ItemContainerStyleSelector; «ItemContainerStyleSelector» будет проигнорирован. Ошибка в окне вывода? – Grx70