Extended WPF StaticExtension - разрешение пространства имен во время разработки - PullRequest
0 голосов
/ 23 января 2020

Мы представили следующее пользовательское расширение разметки WPF для преобразования static object в верхний регистр string.

public class StaticToUpperCaseString : StaticExtension
{
    public StaticToUpperCaseString()
    {
    }

    public StaticToUpperCaseString(string member) : base(member)
    {
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        var str = base.ProvideValue(serviceProvider);
        return str?.ToString().ToUpper();
    }
}

Использование в XAML выглядит как этот - мы заменили наше предыдущее решение ненужной привязкой.

<UserControl x:Class="…"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:resources="clr-namespace:…"
             xmlns:ourNamespace="clr-namespace:…">
   <Label Content={ourNamespace:StaticToUpperCaseString resources:Lang.Message />

   <!-- The previous solution with unnecessary binding -->
   <!-- <Label Content={Binding Source={x:Static resources:Lang.Message}, Converter={…}} /> -->
</UserControl>

Код во время выполнения работает нормально. Проблема заключается в примечании Visual Studio (2017): Псевдоним пространства имен 'resources' не требуется для кода и может быть безопасно удален . Единственное использование - это новое расширение разметки, и оно не распознается правильно. Нет проблем со стандартным StaticExtension.

Мы пробовали атрибут [TypeConverter(typeof (StaticExtensionConverter))] с внутренней копией WPF StaticExtensionConverter, но это не помогает.

...