Любой способ установить ключ ResourceDictionary, чтобы соответствовать имени класса? - PullRequest
0 голосов
/ 07 мая 2018

У меня довольно много <conv:[ConverterName] x:Key="[ConverterName]"/> записей в словарях ресурсов XAML, и каждый раз, когда ключ соответствует имени типа.

Есть ли способ заставить ключ автоматически брать имя из типа, аналогично nameof? Помимо удобства, я бы хотел, чтобы код был немного более защищен от рефакторинга.

1 Ответ

0 голосов
/ 08 мая 2018

Нет способа сделать это в XAML, но вы можете сделать это программно, используя отражение. Примерно так:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        //get all types that implements from all assemlies in the AppDomain
        foreach(var converterType in AppDomain.CurrentDomain.GetAssemblies()
            .SelectMany(a => a.GetExportedTypes())
            .Where(t => typeof(IValueConverter).IsAssignableFrom(t) 
                && !t.IsAbstract 
                && !t.IsInterface))
        {
            //...and add them as resources to <Application.Resources>:
            Current.Resources.Add(converterType.Name, Activator.CreateInstance(converterType));
        }
    }
}
...