Выделите все текстовые блоки с одинаковым текстом

Да и нет. На большинстве современных компьютеров байт является наименьшей адресной единицей памяти, поэтому вы можете читать и записывать только все байты за раз. Тем не менее, вы всегда можете использовать побитовые операторы для управления битами внутри байта.

0
задан Robert Harvey 17 January 2019 в 18:01
поделиться

1 ответ

Для этого вам понадобятся IMultiValueConverter и MultiBinding

Примечание : Возможно, вам придется настроить конвертер на лучше соответствует вашим потребностям

Вариант 1 :
Недостаток: вы должны вернуть свой фон «по умолчанию» тоже

Конвертер:

[110 ]

Использование:

<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 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

0
ответ дан nosale 17 January 2019 в 18:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: