Возможно ли использование стиля метки WPF на основе символа с неизвестным индексом в содержании метки? - PullRequest
1 голос
/ 28 января 2011

Вместо того, чтобы программно устанавливать стиль при изменении требования к полю в форме, можно использовать триггер, который проверяет последний символ в Label. Содержимое является '*', и если это так, задайте свойство для Ярлык

Как-то так, но как проверить последний символ свойства Content?

  <Style x:Key="LabelStandard" TargetType="Label">
    <Setter Property="HorizontalAlignment"      Value="Left"/>
    <Setter Property="VerticalAlignment"        Value="Top"/>
    <Style.Triggers>
        <Trigger Property="Content" Value="*"> <!-TODO only check the last char -->
            <Setter Property="Foreground"      Value="Red"/>
        </Trigger>
    </Style.Triggers>
  </Style>

1 Ответ

3 голосов
/ 28 января 2011

Я думаю, вам придется использовать конвертер для этого. Попробуйте что-то вроде этого

<Style x:Key="LabelStandard" TargetType="Label">
    <Setter Property="HorizontalAlignment"      Value="Left"/>
    <Setter Property="VerticalAlignment"        Value="Top"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource self},
                                       Path=Content,
                                       Converter={StaticResource LastCharConverter},
                                       ConverterParameter=*}"
                     Value="True">
            <Setter Property="Foreground" Value="Red"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
public class LastCharConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null)
        {
            return false;
        }
        string content = value.ToString();
        if (content.Length > 0 &&
            content[content.Length - 1] == (char)parameter)
        {
            return true;
        }
        return false;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Обновление

Вы можете привязать любой заданный символ в строке Content, если вы знаете его положение.

<Style x:Key="LabelStandard" TargetType="Label">
    <Setter Property="HorizontalAlignment"      Value="Left"/>
    <Setter Property="VerticalAlignment"        Value="Top"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource self},
                                       Path=(Content)[2]}"
                        Value="*">
            <Setter Property="Foreground" Value="Red"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

Но если длина вашей строки будет меняться (что, как я полагаю, имеет место), это не принесет вам большой пользы, поскольку вы не можете связать [2] внутри привязки (любым способом, о котором я знаю) .

Кроме этого, я думаю, вам придется создать решение, основанное на коде, как вы сами указали

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...