Вам нужно IMultiValueConverter
и MultiBinding
для этого
Примечание : Возможно, вам придется настроить преобразователь так, чтобы он лучше соответствовал вашим потребностям
Вариант 1 :
Недостаток: Вы должны вернуть свой фон «по умолчанию» тоже
Преобразователь:
public class DistinctBrushMultiValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Distinct().Count() == 1)
{
return Brushes.Orange; //Brush you want for highlight
}
return null; //Or your default Brush
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Использование:
<TextBlock
Name="Test1"
MouseEnter="Test_MouseEnter"
MouseLeave="Test_MouseLeave">
<TextBlock.Background>
<MultiBinding Converter="{StaticResource DistinctBrushMultiValueConverter}">
<Binding Path="TextToMatch" />
<Binding RelativeSource="{RelativeSource Self}" Path="Text" />
</MultiBinding>
</TextBlock.Background>
This matches
</TextBlock>
Вариант 2: Использование Trigger
внутри Style
Преобразователь:
public class DistinctValuesMultiValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return values.Distinct().Count() == 1;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Style:
<Style x:Key="HighlightTextBlockStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource DistinctValuesMultiValueConverter}">
<Binding Path="TextToMatch" />
<Binding Path="Text" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</DataTrigger.Binding>
<DataTrigger.Setters>
<Setter Property="Background" Value="Orange" />
</DataTrigger.Setters>
</DataTrigger>
</Style.Triggers>
</Style>
Использование:
<TextBlock
Name="Test1"
MouseEnter="Test_MouseEnter"
MouseLeave="Test_MouseLeave"
Style="{StaticResource HighlightTextBlockStyle}">
This matches
</TextBlock>
Вариант 3 (только для вашей информации): : Вы также можете использовать Behavior