Ссылка на перечисление, определенное в другой сборке из XAML, с x: Stati c? - PullRequest
0 голосов
/ 10 апреля 2020

Я попал в странную ситуацию, в которой перечисление, определенное в ссылочной сборке (dll, являющееся проектом в том же решении), не найдено для использования в моем XAML. Тот же самый enum найден кодом C# в моей модели представления.

Когда я копирую файл определения enum в проект, ссылки XAML работают, но ссылки C#, конечно, жалуются на дублированное определение. На данный момент я не знаю, как решить эту проблему. Любые идеи? Известные исправления?

Справочная информация:

  • Ссылочная сборка содержит перечисление, которое используется для поддержки радиогруппы XAML, как рекомендовано здесь .
  • Я нашел это , но это не относится к моей ситуации. Перечисление в ссылочной сборке само по себе.
  • Ошибка выдается в первом параметре связывания {x: stati c} в xaml (пример ниже) и гласит: «Не удается найти тип» MyEnum '. Обратите внимание, что имена типов чувствительны к регистру. "
  • Пожалуйста, извините за любые незначительные ошибки в приведенном ниже коде, я набрал его вручную, так как не могу раскрыть производственный код моей компании.

EnumRadioGroupWindow.xaml

<Window x:Class="XamlWindow.EnumRadioGroupWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:XamlWindow"
    xmlns:enum="clr-namespace:EnumLibrary">
    <StackPanel>
        <StackPanel.Resources>
            <local:ComparisonToBoolConverter x:Key="ComparisonToBool"/>
        </StackPanel.Resources>
        <RadioButton Content="Item One" IsChecked="{Binding Path=InstanceOfMyEnum, Mode=OneWay, Converter={StaticResource ComparisonToBool}, ConverterParameter={x:Static enum:MyEnum.One}}"/>
        <RadioButton Content="Item Two" IsChecked="{Binding Path=InstanceOfMyEnum, Mode=OneWay, Converter={StaticResource ComparisonToBool}, ConverterParameter={x:Static enum:MyEnum.Two}}"/>
        <RadioButton Content="Item Three" IsChecked="{Binding Path=InstanceOfMyEnum, Mode=OneWay, Converter={StaticResource ComparisonToBool}, ConverterParameter={x:Static enum:MyEnum.Three}}"/>
    </StackPanel>
</Window>

MyEnum.cs (в отдельной сборке, на которую ссылается проект WPF)

namespace EnumLibrary
{
    public enum MyEnum
    {
        One,
        Two,
        Three
    }
}

1 Ответ

1 голос
/ 10 апреля 2020

Вы пытались добавить имя сборки в xmlns?

xmlns:enum="clr-namespace:EnumLibrary;assembly=EnumLibrary"

Предлагаю еще раз проверить имя сборки вашего проекта EnumLibrary. Если вы изменили его имя в обозревателе решений, это не означает, что оно было обновлено в свойствах проекта (xml узел с именем <AssemblyName> в csproj).

Бонус в XAML, если вам нужно используйте перечисление, встроенное в класс, это делается с помощью + char

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