Я пытаюсь применить некоторые условные стили к DataGridRow, это то, что у меня пока есть:
<DataGrid.ItemContainerStyle>
<Style TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource {x:Type DataGridRow}}">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource SBCInvalidHighlightConverter}">
<Binding Path="." />
<Binding Path="DataContext.SelectedCaseType" RelativeSource="{RelativeSource AncestorType=DataGrid}" />
<Binding Path="IsSelected" RelativeSource="{RelativeSource AncestorType=DataGridRow}"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Foreground" Value="Red"/>
<Setter Property="ToolTip">
<Setter.Value>
<TextBlock Text="This criteria will not be applied"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.ItemContainerStyle>
В основном я пытаюсь запустить этот конвертер SBCInvalidHighlightConverter, чтобы сделать три вещи:
Применять красный шрифт, когда преобразователь возвращает значение true (неверная запись)
Примените красный шрифт также, когда строка выбрана, и конвертор возвращает значение true, в тот момент, когда при выборе он меняет цвет по умолчанию на белый, я хочу, чтобы он оставался красным.
Показывать всплывающую подсказку, когда преобразователь возвращается в исходное состояние, в тот момент, когда он просто открывает окно с надписью "System. Windows .Controls.TextBlock"
Я работаю с первым, но не со вторым и третьим.
Изображение, показывающее выделение и курсор при всплывающем тексте:
![enter image description here](https://i.stack.imgur.com/PXdBA.png)
Итак, вопрос в том, как заставить работать пункты 2 и 3?
А вот преобразователь, не уверен, нужен ли он или нет:
public class SBCInvalidHighlightConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool result = false;
if (values == null || values.Length < 2)
return result;
CTS_EF_DAL.RBCRuleValueForDisplay rowData = (CTS_EF_DAL.RBCRuleValueForDisplay)values[0];
SBC.SubstanceTypeCode criteriaType = (SBC.SubstanceTypeCode)rowData.Rule_Typ_Cd;
SBC.CaseType caseType = (SBC.CaseType)((int)values[1]);
if (caseType != SBC.CaseType.All)
{
var caseTypeAttribute = criteriaType.GetAttribute<SBC.CaseTypeAttribute>();
if (caseTypeAttribute != null && caseTypeAttribute.CaseType != SBC.CaseType.All)
{
if (caseTypeAttribute.CaseType != caseType)
{
return true; //It is invalid
}
}
}
return result;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}