Как получить доступ к конвертеру внутренних классов в другой сборке из XAML с помощью InternalsVisibleTo - PullRequest
0 голосов
/ 02 марта 2020

У меня есть что-то вроде конвертера с той разницей, что класс является внутренним, а для безопасности конвертер принадлежит другой сборке (MyAssembly.dll):

namespace MyAssembly.InAnotherNameSpace
{
    internal class ValueConvertor : IValueConverter
        {        
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                ...
            }

            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                ....
            }
        }
}

И я использую InternalsVisibleToAttribute для доступа к конвертеру из проекта WPF:

....
xmlns:c="clr-namespace:MyAssembly.InAnotherNameSpace;assembly=MyAssembly"
....
 <UserControl.Resources>
        <ResourceDictionary>
            <c:ValueConvertor x:Key="valueConvertor"/>
        </ResourceDictionary>
    </UserControl.Resources>

У меня проблема в XAML, не распознается класс как внутренний, а Visual Studio показывает эту ошибку:

Only public or internal classes can be used within markup. 'ValueConvertor' type is not public or internal. 

Следуйте за этим ответом тема , InternalsVisible Не работает в XAML, это правда?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Вы можете применить обходной путь - создайте конвертер в контрольном коде и используйте его из разметки XAML:

public partial class View : UserControl
{
    public static readonly IValueConverter valueConvertor = new MyAssembly.InAnotherNameSpace.ValueConvertor();

    public View()
    {
        InitializeComponent();
    }
}

<TextBlock Text="{Binding Something, Converter={x:Static local:View.valueConvertor}}"/>
0 голосов
/ 03 марта 2020

Вы можете использовать внутренний класс в другой сборке с InternalsVisibleTo (). Подтверждено с помощью VS2019 и. net 4.7.2.

Редактор XAML VS2019 выдает несколько ошибок, но работает нормально.

  • XDG0009 - тип "UserControl1" недоступен.)
  • XLS0419 - Неопределенное пространство имен CLR. URI 'clr-namespace' относится к пространству имен 'WpfControlLibrary2', которое не может быть найдено

Это кажется лишь ограничением VS XAML Editor.

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